Intereting Posts
Перенесите первый символ каждого слова в строку, кроме 'и', 'to' и т. Д. Получение списка IP-адресов из нотации CIDR в PHP Навигация по ajax не работает после перезаписи htaccess Как использовать PHP json_encode без UTF8? проблемы с профилями страницы в системе, которые всегда отображают, что пользователь является владельцем профиля, который является неправильным Сшивание нескольких видео без разрыва Если у продукта есть отклонение Отключите количество в мини-корзине Woocommerce Загрузка контроллера из другого модуля в CodeIgniter HMVC Сортировка фильмов по 2 вещам Разница между эхом и возвратом в php? PHP: я получаю совершенно пустую страницу, я не знаю, как отлаживать это в PHP Как заменить только последнее совпадение строки с preg_replace? Создание DateTime из timestamp в PHP <5.3 DW-CS5: запуск приложений Facebook на локальном сервере Выбирайте из этого массива только уникальные значения массива

PHP: задайте значение многомерного ассоциативного элемента массива, используя путь, определенный в отдельном массиве

Итак, у меня есть массив, который содержит следующие элементы:

$array['a']['b'][0]['c']; $array['a']['b'][1]['c']; $array['a']['d'][0]['c']['c']; $array['b']['c']; 

Затем в отдельном массиве я определил путь к этим значениям:

 $structure[0] = array('a','b','#','c'); $structure[1] = array('a','d','#','c','c'); $structure[2] = array('b','c'); 

Наконец, у меня есть массив, содержащий значения:

 $values[0] = array('value0-0','value0-1'); $values[1] = array('value1-0'); $values[2] = array('value2-0'); 

Я пытаюсь найти простую функцию / цикл, который сможет применить значения в значениях $ к пути массива массива $, который определен в $ structure.

Конечным результатом будет:

 $array['a']['b'][0]['c']='value0-0'; $array['a']['b'][1]['c']='value0-1'; $array['a']['d'][0]['c']['c']='value1-0'; $array['b']['c']='value2-0'; 

В случае $ values ​​[0] или $ values ​​[1] он сможет прокручивать каждое значение и подставлять элемент $ struct, соответствующий «#», с номером итерации для этого конкретного значения $.

Это просто случай сжимания и записи вытянутой рекурсивной функции, или есть умная конструкция или функция php, которые могли бы обеспечить более элегантное решение?

РЕШЕНИЕ:

Благодаря Марио мое возможное решение:

 foreach ($struct as $i=>$keys) foreach ($values[$i] as $val) { $r = & $array; foreach ($keys as $key) { if ($key == "#") { $key = $i; } $r = & $r[$key]; // move pointer to subarray } $r = $val; } } 

Вам нужно будет работать со ссылками для перемещения целевого массива:

 function inject($array, $struct, $values) { foreach ($struct as $i=>$keys) foreach ($values[$i] as $val) { $r = & $array; foreach ($keys as $key) { if ($key == "#") { $key = count($r); } settype($r[$key], "array"); $r = & $r[$key]; // move pointer to subarray } $r = $val; }