PHP - автоматическое добавление записей в ассоциативный массив с помощью цикла foreach
Я хотел бы автоматически добавлять записи в новый ассоциативный массив, используя цикл foreach. У меня есть массив с именами следующих элементов DOM:
$DOM = array('element2','element22','element222','element2222');
И новый ассоциативный массив:
$NEW = array(
'element1' => '',
'element2' => '',
'element3' => array(
'element33' => array(
'element333' => ''
)
)
);
Теперь использование цикла foreach добавит новую запись/массив в $НОВЫЙ массив:
foreach($DOM as $name){
//Do something
}
Ожидаемый результат:
$NEW = array(
'element1' => '',
'element2' => array(
'element22' => array(
'element222' => array(
'element2222' => ''
)
)
),
'element3' => array(
'element33' => array(
'element333' => ''
)
)
);
Ты можешь сделать что-то подобное? автоматизировать этот процесс?
3 answers
Если я правильно понимаю, $DOM
содержит ключи для создания вложенного массива с пустым строковым значением на самом глубоком уровне. Поэтому вам нужно создать такой массив:
$new_array = array();
$last = &$new_array;
foreach($DOM as $name){
$last[$name] = array();
$last = &$last[$name];
}
$last = '';
unset($last);
И рекурсивно объединить его с $NEW
:
$NEW = array_merge_recursive($NEW, $new_array);
Вы можете использовать функцию array_push()
Проверьте эту справку mabe:
$DOM = array('element2','element22','element222','element2222');
$NEW = array('element1' => '', 'element2' => '', 'element3' => array('element33' => array('element333' => '')));
array_push($NEW, $DOM);
print_r($NEW);
Смотрите здесь:
Php.net/manual/en/function .array-push.php
Или здесь:
Вы можете изменять массивы в циклах foreach, передавая их в качестве ссылок:
foreach($array as &$value)
$value[] = $DOM
Изменить:
<?php
$DOM = array('element2','element22','element222','element2222');
$NEW = array(
'element1' => '',
'element2' => '',
'element3' => array(
'element33' => array(
'element333' => ''
)
)
);
function insert(&$array, $ins) {
$element = array_shift($ins);
if($element == null) return;
foreach($array as $k => &$v) {
if($k === $element) {
$v[current($ins)] = '';
insert($v, $ins);
}
}
}
insert($NEW, $DOM);
var_dump($NEW);