Итерация многомерного массива рекурсивно и возврат той же структуры массива и вставка нового ключа / значений в PHP

Я пытаюсь написать фрагмент, который принимает многомерный массив и вставляет некоторые ключи на том же уровне, где найден именованный ключ поиска. Мне не нужно полагаться на структуру массива (но будет не более 5 уровней). Я не могу использовать передачу по ссылке, поэтому традиционная повторяющаяся функция не поможет этому подходу.

У меня есть 2 варианта: SPL или рекурсия, которая реконструирует массив и изменяет его по пути

с SPL Мне не кажется, что нужно добавить новое значение.

$a= new \ArrayObject($priceConfig); $array = new \RecursiveArrayIterator($a); $iterator = new \RecursiveIteratorIterator($array, \RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $key => $value) { if (is_array($value) && $key == 'prices') { $iterator->offsetSet('myPrice',['amount'=>'1.00']); } } print_r($a->getArrayCopy()); 

Он не будет вставлять новый ключ на желаемом уровне, но он выполняет цикл через массив. Что мне не хватает?

Рекурсивная функция, которая восстанавливает массив и вставляет новые значения в мой поиск ключей в вложенном массиве, работает, но я хотел бы использовать Iterators для этого.

  function recursive( $input, $searchKey, $key=null) { $holder = array(); if(is_array( $input)) { foreach( $input as $key => $el) { if (is_array($el)) { $holder[$key] = recursive($el, $searchKey, $key); if ($key == $searchKey) { $holder[$key]['inertedPrice'] = "value"; } } else { $holder[$key] = $el; } } } return $holder; } 

INPUT (всегда будет иметь некоторый «ключ цены и структура на уровне X»)

  [1] => Array ( [1] => Array ( [prices] => Array ( [onePrice] => Array( [amount] => 10) [finalPrice] => Array ([amount] => 10) ) [key1] => value2 [key2] => value2 ) [2] => Array ( [prices] => Array ( [otherPrice] => Array([amount] => 20) [finalPrice] => Array([amount] => 20) ) [key] => value ) ) ) 

Вывод

 [1] => Array ( [1] => Array ( [prices] => Array ( [onePrice] => Array( [amount] => 10) [finalPrice] => Array ([amount] => 10) [INSERTEDPrice] => Array([amount] => value) ) [key1] => value2 [key2] => value2 ) [2] => Array ( [prices] => Array ( [otherPrice] => Array([amount] => 20) [finalPrice] => Array([amount] => 20) [INSERTEDPrice] => Array([amount] => ) ) [key] => value ) ) 

)