【问题标题】:Show array difference not working显示数组差异不起作用
【发布时间】:2017-02-17 20:04:08
【问题描述】:

如何比较以下两个数组? 当我使用:

array_diff($array1, $array2)

它只显示 $array1 中的所有数组,而不仅仅是 39077

Array1 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 ) 

Array2 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077 )

如果我使用array_diff_keys,我可以用1234作为array1中的值来欺骗它,因为该函数只检查有多少键而不是什么值。

Array1 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 1234) 

Array2 ( [0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077 )

输出将是

array()  

【问题讨论】:

  • 这还不清楚,但是如果你想要39077你需要交换args array_diff($array2, $array1)
  • 但是它只是显示了array2中的所有值,之前它都在$array1中,而不是之间的区别
  • 不,它没有。你的显示空和交换显示390773v4l.org/aUtQ1 你确定你实际上没有运行array_intersect()

标签: php arrays compare


【解决方案1】:

这是正确的 PHP 手册 http://php.net/manual/en/function.array-diff.php 说 date_diff

将 array1 与一个或多个其他数组进行比较并返回 array1 中的值不存在于任何其他数组中。

并且特定于简单数组而不是键(关联)数组..所以键数组不起作用

你可能需要

  array_diff_key($array1, $array2)

那个

array_diff_key — 使用键计算数组的差异 比较

或者你可以使用 array_diff_assoc 来获得价值

 array_diff_assoc($array1, $array2);

【讨论】:

  • 感谢 scaisEdge,很棒的功能 :)
  • @Michael 好吧,如果我的回答是正确的,请将其标记为已接受...看看这里如何meta.stackexchange.com/questions/5234/…
  • 我知道了,还要再等 5 分钟 :)
  • 如果我需要比较这些值怎么办?
  • 解释得更好..你是什么意思..?
【解决方案2】:

它只显示 $array1 中的所有数组,而不仅仅是 39077

只是交换参数

array_diff($array2, $array1);

注意:此答案将返回 $array2 中不存在于 $array1 中的值,它不会返回 $array1 中存在的值 不在 $array2 中。

示例

$ php -r '$a1=array(1,2,3,7,8); $a2=array(1,2,7,10,15); print_r(array_diff($a2,$a1));'
Array
(
    [3] => 10
    [4] => 15
)

输入

$ cat test.php 
<?php

$array1 = array( 40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503);
$array2 = array( 40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503, 39077);

print_r(array_diff($array2,$array1));

?>

输出

$ php test.php 
Array
(
    [11] => 39077
)

【讨论】:

  • 它仍然不起作用,它仍然不仅会显示两者之间唯一的不同。
  • 预期输出
  • @Michael 你交换论点了吗?
  • 我没有得到相同的输出,可能是因为您手动创建了数组。
  • 我使用:$array = array();然后在 foreach $array[] = $value; 中循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多