1

我有两个多维数组,我试图用它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"
  }
}
4

2 回答 2

0

函数 array_intersect 将值作为字符串进行比较,请参阅手册。不幸的是,这只是为所有数组提供了“数组”。

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; })

或者使用 !== 如果您还想比较顺序和类型 - 请参阅此处了解差异。

于 2015-10-23T12:57:48.340 回答
-1

array_intersect_assoc()查看交集的键值。

于 2013-01-30T17:34:29.677 回答