从另一个数组中减去一个数组

时间:2011-04-01 09:54:07

标签: php arrays

好吧,我有

$a2 = array('a'=>'Apple','b'=>'bat','c'=>'Cat','d'=>'Dog','e'=>'Eagle','f'=>'Fox','g'=>'God');
$a3 = array('b','e');

我想从$ a2减去$ a3得到:

$aNew = array('a'=>'Apple','c'=>'Cat','d'=>'Dog','f'=>'Fox','g'=>'God');

任何帮助?

7 个答案:

答案 0 :(得分:3)

这两个内置函数可以执行类似的操作:array_diffarray_diff_assoc - 但两者都不适用于您的情况。

所以,为了做你想做的事,你必须改变你的$a3的标记以适应这些功能(看看文档),否则你将不得不循环{{ 1}}并手动删除$a3中的元素:

$a2

答案 1 :(得分:2)

foreach($a3 as $value){

   if(isset($a2[$value]))
         unset($a2[$value]);
}

答案 2 :(得分:1)

不明白。

$aNew = $a2;
foreach($a3 as $key) unset($aNew[$key]);
你需要这个吗?

答案 3 :(得分:1)

这可以通过php内置函数来完成。

由于数组$a2包含您要删除的的值,因此首先需要使用{{创建一个包含$a2值的数组作为键。 1}}。然后你可以使用array_flip。所以试试这个:

array_diff_key

请注意,您需要php> 5.1.0为此工作。

答案 4 :(得分:0)

$aNew = array();
foreach (array_diff(array_keys($a2), $a3) : $key) {
   $aNew[key] = $a2[key];
}

这可以胜任。从a2中删除键,删除a3中存在的所有键,然后将剩余的键复制到新数组中。您也可以从旧阵列中删除键。这取决于你。

编辑:+ $

答案 5 :(得分:0)

这里的困难在于您将一个数组的与另一个数组的进行比较。例如。通过使用array_diff_ukey。 摘自PHP手册:

  function key_compare_func($key1, $key2)
  {
     if ($key1 == $key2)
       return 0;
     else if ($key1 > $key2)
       return 1;
    else
       return -1;

}

$ array1 = array('blue'=> 1,'red'=> 2,'green'=> 3,'purple'=> 4); $ array2 = array('green'=> 5,'blue'=> 6,'yellow'=> 7,'cyan'=> 8);

var_dump(array_diff_ukey($ array1,$ array2,'key_compare_func'));

array(2){   [ “红色”] =>   INT(2)   [ “紫色”] =>   INT(4) }

你的第二个数组不是关联的,所以这会将“a”与0比较,例如 所以它是:

$compareFunc = function($key) uses ($a3) {
 if(array_key_exists($key, $a3) {
    return true;
 }
 else return false;
}

array_map($compareFunc, $a2);

既不能使用,因为此函数用于修改但不减少数组。

$a4 = array();
$compareFunc = function($key) uses ($a3, &$a4) {
 if(array_key_exists($key, $a3) {
    array_push($a4);
 }
} 

可以胜任。
我想要实现的是: 使用PHP - 当标准功能不成功时为您提供回调的功能。 当回调的描述不符合您的需求时,请尝试使用绑定的概念。使用PHP的Lambda函数,您可以将对象/变量绑定到函数, 这样您就可以访问未传递给回调的变量。 发挥创意!!!

答案 6 :(得分:-2)

尝试使用array_diff 但你需要对$ a3进行一些更改。

$a3 = array('bat', 'Eagle');
//and then
$a4 = array_diff($a2, $3);

因为没有指定密钥(格式为key => value),字符串将自动成为值。