Php 使用现有密钥的另一个数组更新多维数组

Php 使用现有密钥的另一个数组更新多维数组,php,multidimensional-array,Php,Multidimensional Array,我有两个阵列: ('admin'、'admin2'、'admin3'可能太多,名称也可能不同于'admin') 我想从以上两个阵列中获得此阵列: (新数组,两个数组中有所有不同的键,加上新数组中的类似键) 此代码将解决您的问题: <?php $array1 = array( array('admin'=>array('a'=>'aaa','b'=>'bbb')), array('admin2'=>array('c'=>'ccc','d'=&g

我有两个阵列: ('admin'、'admin2'、'admin3'可能太多,名称也可能不同于'admin')

我想从以上两个阵列中获得此阵列: (新数组,两个数组中有所有不同的键,加上新数组中的类似键)


此代码将解决您的问题:

<?php 
$array1 = array(
    array('admin'=>array('a'=>'aaa','b'=>'bbb')),
    array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$array2 = array(
    array('admin2'=>array('e'=>'eee','f'=>'fff')),
    array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

$output = $array1; ///merge array1 into output array

foreach($array2 as $key => $val)
{
    $is_present_key = false;
    $first_key = key($val);
    foreach($output as $k => $v)
    {
        if(array_key_exists($first_key,$output[$k])) ////check if key exit in $output array
        {
            $output[$k] = $val; ///push new value if key exists in $output
            $is_present_key = true;
        }
    }
    if($is_present_key == false)///skip for duplicate of new values if key exists in $output 
    {
        $output[] = $val;
    }
}

echo "<pre>"; print_r($output);

?>

$old=array(
数组('admin'=>array('a'=>'aaa','b'=>'bbb')),
数组('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);
$new=数组(
数组('admin2'=>array('e'=>'eee','f'=>'fff')),
数组('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);
$arr=数组合并($new,$old);
$new_arr=array();
foreach($arr作为$key=>$val){
foreach($val为$k=>$v){
如果(数组\u键\u存在($k,$new\u arr)){
继续;
}否则{
$new_arr[$k]=$v;
}
}
}
回声“;打印(新的);回声“;

它工作正常,但我需要一个更简单的解决方案,如果没有人发布一个简单的解决方案,那么我一定会选择您的答案。我不认为有这样的数组结构就很容易了。但是,也许
$output = array(
array('admin'=>array('a'=>'aaa','b'=>'bbb')),
array('admin2'=>array('e'=>'eee','f'=>'fff')),
array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);
// Remove one level of array to make arrays as ['admin'=>array, 'admin2'=>array]
$old1 = call_user_func_array('array_merge', $old);
$new1 = call_user_func_array('array_merge', $new);
// Make replacement
$ready =  array_replace($old1, $new1);
// Return level making every item as array 
$result = array();
foreach($ready as $k=>&$v) 
    $result[] = array($k=>$v);
print_r($result);
<?php 
$array1 = array(
    array('admin'=>array('a'=>'aaa','b'=>'bbb')),
    array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$array2 = array(
    array('admin2'=>array('e'=>'eee','f'=>'fff')),
    array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

$output = $array1; ///merge array1 into output array

foreach($array2 as $key => $val)
{
    $is_present_key = false;
    $first_key = key($val);
    foreach($output as $k => $v)
    {
        if(array_key_exists($first_key,$output[$k])) ////check if key exit in $output array
        {
            $output[$k] = $val; ///push new value if key exists in $output
            $is_present_key = true;
        }
    }
    if($is_present_key == false)///skip for duplicate of new values if key exists in $output 
    {
        $output[] = $val;
    }
}

echo "<pre>"; print_r($output);

?>
Array
(
    [0] => Array
        (
            [admin] => Array
                (
                    [a] => aaa
                    [b] => bbb
                )

        )

    [1] => Array
        (
            [admin2] => Array
                (
                    [e] => eee
                    [f] => fff
                )

        )

    [2] => Array
        (
            [admin3] => Array
                (
                    [g] => ggg
                    [h] => hhh
                )

        )

)
$old = array(
  array('admin'=>array('a'=>'aaa','b'=>'bbb')),
  array('admin2'=>array('c'=>'ccc','d'=>'ddd'))
);

$new = array(
  array('admin2'=>array('e'=>'eee','f'=>'fff')),
  array('admin3'=>array('g'=>'ggg','h'=>'hhh'))
);

$arr=array_merge($new,$old);
$new_arr=array();
foreach($arr as $key=>$val){
    foreach($val as $k=>$v){
        if(array_key_exists($k, $new_arr)){
            continue;
        }else{
            $new_arr[$k]=$v;
        }
    }
}
echo "<pre>";print_r($new_arr); echo "</pre>";