我需要这么多,我认为必须有一种方法来避免循环数组来完成这项任务。
示例数组
$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
使用$array2
的值覆盖$array1
,但忽略array1中的额外数据(上面的示例应忽略名称)
如何取消设置$array1
$filter
的所有array_keys
如何仅从$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
感谢
答案 0 :(得分:2)
1合并array1和array2,使用array1的值覆盖array2,并添加缺少的键。
$a1 = $a1 + $a2;
2合并$ array1,其中$ array2用$ array1中的值覆盖$ array2,但忽略了array1中的额外数据(上面的例子应该忽略名称)
$a2 = $a2 + $a1;
3 - 如何从$ filter1中取消设置$ filter
中的所有array_keysarray_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]);
});