为什么 array_diff() 在比较时排除具有相同值但不同键的元素? [重复]

问题描述 投票:0回答:3

我在 2 个关联数组之间有一个

array_diff()
函数,但结果不正确。我不明白为什么它不返回
status
值作为差异。第一个数组是要过滤的输入数组,第二个是过滤数组,第三个是结果。结果中应该包含
status
,因为值不同。

$result = array_diff($data,$row );
array(9) {
  ["scooter_id"]=>
  string(6) "RO0001"
  ["battery_lvl"]=>
  string(2) "80"
  ["lat"]=>
  string(9) "44.312150"
  ["lng"]=>
  string(9) "23.872900"
  ["alt"]=>
  string(1) "0"
  ["speed"]=>
  string(1) "0"
  ["status"]=>
  string(1) "2"
  ["ip"]=>
  string(14) "213.233.101.62"
  ["port"]=>
  int(24600)
}

array(11) {
  ["battery_lvl"]=>
  string(2) "80"
  ["nr_satelites"]=>
  string(1) "1"
  ["lat"]=>
  string(9) "44.312154"
  ["longi"]=>
  string(9) "23.873007"
  ["alt"]=>
  string(1) "0"
  ["speed"]=>
  string(1) "0"
  ["status"]=>
  string(1) "1"
  ["location"]=>
  string(7) "romania"
  ["ip"]=>
  string(14) "213.233.101.62"
  ["port"]=>
  string(5) "24600"
  ["status_intermediar"]=>
  string(1) "2"
}

array(3) {
  ["scooter_id"]=>
  string(6) "RO0001"
  ["lat"]=>
  string(9) "44.312150"
  ["lng"]=>
  string(9) "23.872900"
}
php arrays filter associative-array array-difference
3个回答
1
投票

array_diff
仅检查值。

因为你的第二个数组包含

["status_intermediar"]=> string(1) "2"
它找到了该值,所以它不会将其视为差异

如果您想同时检查键和值,您应该使用

array_diff_assoc

此外,如果您想从两个数组中找到所有不同的值,您应该运行两次

$difference1=array_diff_assoc($array1,$array2);

$difference2=array_diff_assoc($array2,$array1);


1
投票

array_dif 是单向函数(“将 array1 与一个或多个其他数组进行比较,并返回 array1 中不存在于任何其他数组中的值。”- https://www.php.net/manual/en/ function.array-diff.php).

如果您想要所有差异,则必须调用它两次: array_dif($first, $second) 和 array_dif($second, $one) 并可选择合并结果。


1
投票
$array_difference1 = array_merge(array_diff($array1, $array2),
    array_diff($array2, $array1));

$array_differnce = array_merge(array_diff($array_difference1, $array3),
    array_diff($array3, $array_difference1));
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.