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

php 通过array_merge()和array+array合并数组的区别和效率比较

PHP array_merge() 函数

array_merge和array的区别分析

PHP中array_merge函数与array+array的区别

PHP中array_merge函数与array+array的区别