Я пытаюсь написать фрагмент, который принимает многомерный массив и вставляет некоторые ключи на том же уровне, где найден именованный ключ поиска. Мне не нужно полагаться на структуру массива (но будет не более 5 уровней) Я не могу использовать прохождение по ссылке, поэтому традиционная повторяющаяся функция не поможет этому подходу.Итерация многомерного массива рекурсивно и возврат той же структуры массива и вставка нового ключа/значений в PHP
У меня есть 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());
Он не будет вставлять новый ключ на желаемом уровне, но он выполняет цикл через массив. Что мне не хватает?
рекурсивная функция, которая реконструирует массив и вставить новые значения в моем ключе поиска в вложенных работах массива, но я хотел бы использовать итераторы, чтобы сделать это ..
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;
}
ВХОДОМ (всегда будет иметь некоторые "ключ цены и структуры на уровне 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
)
)
)
Пожалуйста, включите образец ввода и вывода, чтобы мы могли лучше понять вопрос. – erisco
добавил желаемый результат и предоставил вход – PartySoft