PHP -使用foreach循环在关联数组中自动添加记录


PHP - automatically add records in an associative array using foreach loop

我想使用foreach循环自动将记录添加到新的关联数组。我有一个包含以下DOM元素名称的数组:

$DOM = array('element2','element22','element222','element2222');

和一个新的关联数组:

$NEW = array(
    'element1' => '',
    'element2' => '',
    'element3' => array(
        'element33' => array(
            'element333' => ''
        )
    )
);

现在使用foreach循环将添加一个新的记录/数组到$ new array:

foreach($DOM as $name){
    //Do something
}

预期结果:

$NEW = array(
    'element1' => '',
    'element2' => array(
        'element22' => array(
            'element222' => array(
                'element2222' => ''
            )
        )
    ),
    'element3' => array(
        'element33' => array(
            'element333' => ''
        )
    )
);

你可以这样做吗?自动化这个过程?

如果我理解正确,$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()函数

检查这个可能的帮助:

$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

可以通过将数组作为引用传递给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);