我有两个我正在比较的数组。比较完美如下:
$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" } }
答案 0 :(得分:2)
$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;
我认为 echo $tmp
只会输出'Array'
,因此您可能必须循环(可能使用foreach
)来显示每个值,或使用var_dump
。
array_diff_key
也可以使用键array_diff
和值(您提到"值"在您的问题中)。
答案 1 :(得分:2)
使用array_intersect
。 array_intersect
给出了两者中的值。
$tmp2 = array_intersect($arr1, $arr2);
var_dump($tmp2);
编辑:误读了这个问题。 array_diff
将达到目的。 array_diff
返回参数1中的值,这些值在其余参数中不存在。
$tmp2 = array_diff($arr2, $arr1);
var_dump($tmp2);
编辑:在您的情况下,您的$arr2
内部有一个数组,其中包含值。因此,您需要array_diff($arr2[0], $arr1);
这是一个有效的fiddle。
答案 2 :(得分:1)
你可以这样做:
foreach($tmp as $key=>$value) {
if(isset($arr2[$key])) {
echo $arr2[$key];
}
}
答案 3 :(得分:1)
根据我对array_diff_key
的理解,该函数返回一个数组,其中包含来自argument1的所有条目,其中的键不存在于任何其他数组中。所以只需将$arr2
放入第一个参数中。
所以你的代码应该是:
$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;
答案 4 :(得分:1)
交换方向:
$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;
答案 5 :(得分:1)
如果您关注的是值而非关键值,那么您应该只使用array_diff()
。您还需要反转参数中数组的顺序。最后回显一个数组不会显示你想要的,使用var_dump()
。所以把它们放在一起:
$tmp = array_diff($arr2, $arr1);
var_dump($tmp);