php array_merge 和 array_intersect 使用合并、过滤数组
Posted
技术标签:
【中文标题】php array_merge 和 array_intersect 使用合并、过滤数组【英文标题】:php array_merge and array_intersect usage to merge, filter an array 【发布时间】:2014-03-09 01:38:09 【问题描述】:我非常需要这个,我在想必须有一种方法可以避免循环数组来完成这项任务。
示例数组
$array1 = ['user_id'=>'1','password'=>'PASS','name'=>'joe','age'=>'12'];
$array2 = ['user_id'=>'0','password'=>'default','age'=>'21'];
$filter = ['user_id','password'];
问题是我该怎么做
合并 array1 和 array2,用 array1 的值覆盖 array2,并添加缺失的键。
将$array1
与$array2
合并,用来自$array1
的值覆盖$array2
,但忽略array1 中的额外数据(以上示例应忽略名称)
如何从$array1
中取消设置所有array_keys,它位于$filter
中
如何只从$array1
返回数组的一部分,其中键存在于$filter
中
不使用循环?
对不起,如果我要求很多,但这是为了收集 array_intersect 、 array_merge 和 array_diff 的大多数用法以及如何正确使用它们。
编辑:
预期输出
for 1.
['user_id'=>'1','password'=>'PASS','name'=>'joe','age'=>'12']; //since all array2 was overwritten and extra keys was added
2.
['user_id'=>'1','password'=>'PASS','age'=>'12'];
3.
['age'=>'21']; //removed user_id,password from array1 since they exist in $filter
4.
['user_id'=>'1','password'=>'PASS','age'=>'12'];//return only values of keys that exist in $filter
谢谢
【问题讨论】:
我很不清楚其中一些操作应该完成什么。请给出每个问题的预期结果。 【参考方案1】:1-合并array1和array2用array1的值覆盖array2,并添加缺失的键。
$a1 = $a1 + $a2;
2-merge $array1 与 $array2 用来自 $array1 的值覆盖 $array2,但忽略 array1 中的额外数据(上面的示例应该忽略名称)
$a2 = $a2 + $a1;
3-如何从 $filter 中的 $array1 中取消设置所有 array_keys
array_walk($array1, function($val,$key) use(&$array1, $filter)
if(in_array($key, $filter)) unset($array1[$key]);
);
4-如何从 $array1 中只返回 $filter 中存在键的部分数组
array_walk($array1, function($val,$key) use(&$array1, $filter)
if(!in_array($key, $filter)) unset($array1[$key]);
);
【讨论】:
不错!我完全忘记了数组中的+
!
$a1 = array_filter($a1, function($var) use($filter) return in_array($var, $filter) ? true : false; );
这解决了 3 和 4 如果没有键。
不确定我对 3 和 4 的回答是否最好。必须有更好的方法
@Zalaboza - 我通过了你的测试吗?以上是关于php array_merge 和 array_intersect 使用合并、过滤数组的主要内容,如果未能解决你的问题,请参考以下文章
php 通过array_merge()和array+array合并数组的区别和效率比较