Обновить конкретное значение ключа в многомерном массиве
я попробовал несколько способов обновления конкретного массива на определенной глубине в многомерном массиве. Хотя я могу обновить, но это не изменяет исходный массив. Несмотря на то, что я попробовал ссылаться на технику php, но, похоже, шансы не в мою пользу.
Что я уже пробовал:
// Multidimensional array would be as tree // lets call this array = $tree[$i]['child'] Array ( [0] => Array ( [name] => hasan [clientCode] => 06442 [somekey] => 707 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => Aslan [clientCode] => 06447 [somekey] => 712 [individualCommission] => 10 ) [1] => Array ( [name] => Kudret [clientCode] => 06448 [somekey] => 713 [individualCommission] => 10 ) [2] => Array ( [name] => Emir [clientCode] => 06446 [somekey] => 711 [individualCommission] => 10 ) ) ) [1] => Array ( [name] => emine [clientCode] => 06443 [somekey] => 708 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => Kaan [clientCode] => 06449 [somekey] => 714 [individualCommission] => 10 ) [1] => Array ( [name] => Duygu [clientCode] => 06450 [somekey] => 715 [individualCommission] => 10 ) [2] => Array ( [name] => Hakan [clientCode] => 06451 [somekey] => 716 [individualCommission] => 10 ) [3] => Array ( [name] => Yesim [clientCode] => 06452 [somekey] => 717 [individualCommission] => 10 ) ) ) [2] => Array ( [name] => Aysel [clientCode] => 06444 [somekey] => 709 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => Ismet [clientCode] => 06453 [somekey] => 718 [individualCommission] => 10 ) [1] => Array ( [name] => Suna [clientCode] => 06454 [somekey] => 719 [individualCommission] => 10 ) [2] => Array ( [name] => Kudriya [clientCode] => 06455 [somekey] => 720 [individualCommission] => 10 ) ) ) [3] => Array ( [name] => Ali [clientCode] => 06445 [somekey] => 710 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => Gulen [clientCode] => 06456 [somekey] => 721 [individualCommission] => 10 ) [1] => Array ( [name] => Halit [clientCode] => 06457 [somekey] => 722 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => Seniz [clientCode] => 06458 [somekey] => 723 [individualCommission] => 10 ) [1] => Array ( [name] => Güzin [clientCode] => 06459 [somekey] => 724 [individualCommission] => 10 [child] => Array ( [0] => Array ( [name] => test client [clientCode] => 06460 [somekey] => 725 [individualCommission] => 10 ) [1] => Array ( [name] => test client 2 [clientCode] => 06461 [somekey] => 726 [individualCommission] => 10 ) ) ) ) ) ) ) )
допустим, вышеприведенный массив находится в функции A, и я передал этот вышеприведенный массив, который, скажем, является $tree[$i]['child'], как показано ниже:
function A($tree) { $i = 5; $childArr = &$tree[$i]['child']; $childArr = findandReplace($childArr); dump($childArr); // still same nothing changed at that specific index of array }
Мне удалось успешно найти конкретный массив с помощью
function findandReplace($array) { // Loops through each element. If element again is array, function is recalled. If not, result is echoed. foreach($array as $key=>$value) { if(is_array($value)) { findandReplace($value); } else{ if ($key == 'clientCode' && $value == '06459') { // echo $key." = ".$value."<br />\n"; $array['individualCommission'] = '10000000000000'; break; } } } return $array; }
Итак, в приведенном выше примере я нацеливался на массив с clientCode = 06459, и если он был найден, я обновлял его индивидуальный ключ Commission до некоторого значения. если я делаю дамп после обновления с помощью $array['individualCommission'] = '10000000000000';, то, похоже, мне удалось успешно обновить его. но, к сожалению, исходный массив все тот же, следовательно, немодифицированный.
Еще одна попытка, которую я сделал, он обновил этот конкретный массив и вернул только этот конкретный массив, и я потерял все остальные массивы многомерного массива.
function findandReplace($array) { $parent = &$array; $iterator = new \RecursiveIteratorIterator( new \RecursiveArrayIterator($array), \RecursiveIteratorIterator::SELF_FIRST ); // $result = array(); foreach ($iterator as $key => $item) { if ( $key === 'clientCode' && $item == '06459') { $parent = (array)$iterator->getInnerIterator(); $parent['individualCommission'] = '1000000000000000'; // $array[3]['child'][1]['child'][1]['individualCommission'] = $parentCommission; break; } } return $array; }
поэтому я буду признателен, если кто-нибудь уделит немного времени и найдет какое-нибудь решение этой простой проблемы.
Спасибо!