我有两个多维数组,我尝试使用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"
}
}
答案 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()查看交叉点的和键值。