Динамически заменить значение в многомерном массиве другим значением - PullRequest
0 голосов
/ 08 октября 2018

У меня есть многомерный массив в PHP и я пытаюсь динамически заменить значения другим значением в этом массиве.

Вот пример:

$data =
array(356) {
  [0]=>
  array(6) {
    [0]=>
    string(3) "001"
    [1]=>
    string(19) "14.04.2018 14:00:00"
    [2]=>
    string(39) "mJA"
    [3]=>
    string(26) "JSG Handball"
    [4]=>
    string(13) "TSG Frankfurt"
    [5]=>
    string(52) "1410601539 Ground 1"
  }
  [1]=>
  array(6) {
    [0]=>
    string(3) "001"
    [1]=>
    string(19) "14.04.2018 14:00:00"
    [2]=>
    string(48) "wJB"
    [3]=>
    string(26) "SC Berlin"
    [4]=>
    string(10) "JSG Handball"
    [5]=>
    string(44) "1410601105 Ground 2"
  }
...
}

Что мне нужно сделать, так это то, что я хочу выполнить поиск по всему массиву и заменить любое нахождение строки «Гандбол JSG» строкой в ​​массиве.ключ [x] [2].Итак, в моем примере «JSG Handball» будет заменен на «mJA», а «JSG Handball» будет заменен на «wJB» во втором открытии.

Что я достиг к настоящему моменту (благодаря этим замечательным людямздесь) статическая замена на array_walk_recursive, но я не могу получить дальше.

array_walk_recursive($data, function(&$data) {      
    if($data == "JSG Handball") {
         $data = "Whatever";
    }
}); 

Любая помощь высоко ценится;) Заранее спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

Использование array_walk_recursive даст вам значение и ключ для каждого элемента, но не текущий массив, в котором находятся этот ключ и значение.

Что вы можете сделать, это зациклить массив, используя 2умножить на foreach и использовать & для передачи по ссылке для обновления исходного массива.

$data = [
    [
        "001",
        "14.04.2018 14:00:00",
        "mJA",
        "JSG Handball",
        "TSG Frankfurt",
        "1410601539 Ground 1",
    ],
    [
        "001",
        "14.04.2018 14:00:00",
        "wJB",
        "SC Berlin",
        "JSG Handball",
        "1410601105 Ground 2"
    ]
];

foreach ($data as &$d) {
    foreach ($d as &$item) {
        if ($item === "JSG Handball" && isset($d[2])) {
            $item = $d[2];
        }
    }
}

print_r($data);

Demo php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...