PHP - 合并阵列 [英] PHP - merging arrays
本文介绍了PHP - 合并阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
$ ARR1 =阵列(
'名称',
'日期'=>阵列(默认=>'2009-06-13','格式'=>短),
'地址',
拉链code'=>阵列(默认=> 12345,隐藏= GT;真)
);$ ARR2 =阵列(
'名称',
'语言',
'日期'=>阵列('格式'=>'长','隐藏'= GT;真)
拉链code'=>阵列('隐藏'=>假)
);
下面是所期望的结果:
$最终=阵列(
'名称',
'日期'=>阵列(默认=>'2009-06-13','格式'=>'长','隐藏'= GT;真)
拉链code'=>阵列(默认=> 12345,隐藏= GT;假)
);
- 仅从$ ARR2(即同时存在于$ ARR1)的元素被用来
- 每个元素的属性被合并
- 如果一个共同的元素(例如拉链code)共享一个属性(例如隐藏),然后从$ ARR2属性接受precedence
什么是解决这个问题的一些好的方法?
先谢谢了。
编辑:我试着蹒跚的东西一起......批评的欢迎:
$ new_array = array_intersect_key($ ARR2,$ ARR1);的foreach($ new_array为$关键=> $ VAL)
{
如果(is_array($ ARR1 [$关键]))
{
如果(is_array($ VAL))
{
$ new_array [$关键] = array_merge($ VAL,$ ARR1 [$关键]);
}
其他
{
$ new_array [$关键] = $ ARR1 [$关键];
}
}
}
解决方案
您已经接近
$ newArr = array_intersect_key($ ARR1,$ ARR2);
的foreach($ newArr为$关键=> $ VAL)
{
如果(is_array($ VAL))
{
$ newArr [$关键] = array_merge($ ARR1 [$关键],$ ARR2 [$关键]);
}
}
修改
只是不得不改变array_intersect为array_intersect_key
$arr1 = array(
'name',
'date' => array('default' => '2009-06-13', 'format' => 'short'),
'address',
'zipcode' => array('default' => 12345, 'hidden' => true)
);
$arr2 = array(
'name',
'language',
'date' => array('format' => 'long', 'hidden' => true),
'zipcode' => array('hidden' => false)
);
Here's the desired result:
$final = array(
'name',
'date' => array('default' => '2009-06-13', 'format' => 'long', 'hidden' => true),
'zipcode' => array('default' => 12345, 'hidden' => false)
);
- Only the elements from $arr2 (that also exist in $arr1) are used
- Each element's attributes are merged
- If a common element (e.g. zipcode) shares an attribute (e.g. hidden), then the attribute from $arr2 takes precedence
What are some good approaches for solving this problem?
Thanks in advance.
EDIT: I tried to hobble something together... critiques welcomed:
$new_array = array_intersect_key($arr2, $arr1);
foreach ($new_array as $key => $val)
{
if (is_array($arr1[$key]))
{
if (is_array($val))
{
$new_array[$key] = array_merge($val, $arr1[$key]);
}
else
{
$new_array[$key] = $arr1[$key];
}
}
}
解决方案
You were close
$newArr = array_intersect_key($arr1, $arr2);
foreach ($newArr as $key => $val)
{
if (is_array($val))
{
$newArr[$key] = array_merge($arr1[$key], $arr2[$key]);
}
}
Edit Just had to change the array_intersect to array_intersect_key
这篇关于PHP - 合并阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文