1

我有两个要比较的数组。比较工作完美,如下所示:

  $tmp = array_diff_key($arr1, $arr2);
  $echo $tmp;

但是,我只想显示数组 2 中存在但数组 1 中不存在的值。

编辑:好的,谢谢大家的帮助。我怎么仍然无法使它工作。

我现在正在使用

   $tmp = array_diff($arr2, $arr1);
  var_dump($tmp);

打印出以下内容:

  array(1) { [0]=> array(3) { [0]=> string(4) "cars" [1]=> string(4) "vans" [2]=> string(6) "people" } }

所以,我会稍微解释一下。

阵列 1 有汽车、货车(这是从数据库中提取的)。

数组 2 有汽车、人(这是从表格中输入的)。

我试图只显示不在数据库中的值,所以我认为 $tmp 会回显人,因为汽车在数据库中,而货车在 $arr1

我希望这很清楚,因为它甚至让我在写它时感到困惑;)

如果我分别 var_dump 两个数组,我会得到

    array(3) { [0]=> NULL [1]=> string(4) "cars" [2]=> string(4) "vans" } array(1) { [0]=> array(2) { [0]=> string(6) "people" [1]=> string(5) "tanks" } }
4

6 回答 6

2

使用array_intersect. array_intersect给出两者中的值.

$tmp2 = array_intersect($arr1, $arr2);
var_dump($tmp2);

编辑:误读了这个问题。array_diff将达到目的。array_diff从 argument1 返回其余参数中不存在的值。

$tmp2 = array_diff($arr2, $arr1);
var_dump($tmp2);

编辑:在您的情况下,您$arr2的内部有一个包含值的数组。所以,你需要array_diff($arr2[0], $arr1);

这是一个工作小提琴

于 2013-02-05T16:20:23.537 回答
2
$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;

echo $tmp我认为只会输出'Array',所以你可能必须循环它(也许用foreach)来显示每个单独的值,或者使用var_dump.

array_diff_key也适用于键array_diff和值(您在问题中提到“值”)。

于 2013-02-05T16:20:11.843 回答
1

根据我对 的理解array_diff_key,该函数返回一个数组,其中包含来自 argument1 的所有条目,其键不存在于任何其他数组中。因此,只需放入$arr2第一个论点。

所以你的代码应该是:

$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;

资源

于 2013-02-05T16:20:49.117 回答
1

换个方向:

$tmp = array_diff_key($arr2, $arr1);
  $echo $tmp;
于 2013-02-05T16:21:22.687 回答
1

您可以执行以下操作:

foreach($tmp as $key=>$value) {
    if(isset($arr2[$key])) {
        echo $arr2[$key];
    }
}
于 2013-02-05T16:20:19.340 回答
1

如果您关心的是值而不是键值,那么您应该只使用array_diff(). 您还需要颠倒参数中数组的顺序。最后回显一个数组不会向你展示你想要什么,使用var_dump(). 所以把它们放在一起:

$tmp = array_diff($arr2, $arr1);
var_dump($tmp); 
于 2013-02-05T16:21:59.377 回答