php array_merge和array_intersect用法合并,过滤数组

时间:2014-03-09 01:38:09

标签: php arrays multidimensional-array array-merge

我需要这么多,我认为必须有一种方法来避免循环数组来完成这项任务。

示例数组

$array1 = ['user_id'=>'1','password'=>'PASS','name'=>'joe','age'=>'12'];
$array2 = ['user_id'=>'0','password'=>'default','age'=>'21'];
$filter = ['user_id','password'];

问题是我怎么能

  1. 合并array1和array2,使用array1的值覆盖array2,并添加缺少的键。

  2. 合并$array1$array2使用$array2的值覆盖$array1,但忽略array1中的额外数据(上面的示例应忽略名称)

  3. 如何取消设置$array1

  4. $filter的所有array_keys
  5. 如何仅从$array1

  6. 中存在密钥的$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 个答案:

答案 0 :(得分:2)

1合并array1和array2,使用array1的值覆盖array2,并添加缺少的键。

$a1 = $a1 + $a2;

2合并$ array1,其中$ array2用$ array1中的值覆盖$ array2,但忽略了array1中的额外数据(上面的例子应该忽略名称)

$a2 = $a2 + $a1;

3 - 如何从$ filter1中取消设置$ filter

中的所有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]);
});