Php 使用现有密钥的另一个数组更新多维数组
我有两个阵列: ('admin'、'admin2'、'admin3'可能太多,名称也可能不同于'admin') 我想从以上两个阵列中获得此阵列: (新数组,两个数组中有所有不同的键,加上新数组中的类似键)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
此代码将解决您的问题:
<?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>";