Array_Intersect无法按预期工作

时间:2013-01-30 17:30:14

标签: php arrays array-intersect

我有两个多维数组,我尝试使用array_intersect来查找$array1中出现的$array2值。相反,如下所示,结果包括第一个数组$array1中的两个值,即使第二个数组$array2中只有一个值出现。我想我对这个功能如何运作有一些误解,有人能澄清我在这里做错了吗?

var_dump($array1);
array(2) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "28"
  }
  [7]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}

var_dump($array2);
array(1) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}


var_dump(array_intersect($array1, $array2));
array(2) {
  [0]=>
  array(1) {
    ["id"]=>
    string(2) "28"
  }
  [7]=>
  array(1) {
    ["id"]=>
    string(2) "30"
  }
}

2 个答案:

答案 0 :(得分:0)

函数array_intersect将值作为字符串进行比较,请参阅manual。不幸的是,这简单地给出了#34; Array"对于所有阵列。

Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation
is the same.

相反,您可以使用自定义比较功能:

array_uintersect($array1, $array2, function($a, $b) { return ($a<$b)?-1:($a==$b)?0:1; })

或者使用!==如果您还要比较订单和类型 - 请参阅here了解差异。

答案 1 :(得分:-1)

array_intersect_assoc()查看交叉点的键值。