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' => ''
        )
    )
);

Ты можешь сделать что-то подобное? автоматизировать этот процесс?

Author: Kuba, 2013-05-26

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);
 0
Author: dev-null-dweller, 2013-05-26 11:36:06

Вы можете использовать функцию 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

Или здесь:

Www.w3schools.com/php/func_array_push.asp

 0
Author: Mohammad Masoudian, 2013-05-26 11:07:56

Вы можете изменять массивы в циклах 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);
 0
Author: kelunik, 2013-05-27 11:29:12