5

我很困惑 array_diff 行为

为什么 diff 数组上不存在流派?你知道如何解决这个问题吗?

-代码

<?php
$array1 = array
(
    'value01' => '0',
    'value02' => 'v2',
    'genre' => '1',
    'type' => 'text',
    'contry' => 'us',
    'data' => '1',
);
$array2 = array
(
    'value01' => 'v1',
    'value02' => 'v2',
    'genre' => '0',
    'type' => 'text',
    'contry' => 'canada',
    'data' => '1',
);

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

我的结果:

Array
(
    [contry] => us
)

但我期望:

Array
(
    [value01] => 0,
    [genre] => 1,
    [contry] => us,
);
4

2 回答 2

18

我相信你想用array_diff_assoc

http://www.php.net/manual/en/function.array-diff-assoc.php

于 2011-01-20T00:53:06.547 回答
5

array_diff对数组的值进行操作,并忽略键。

因为genre您的第一个数组中的值为1,这意味着如果该值1出现在第二个数组中的任何键上,则该genre键将从第一个数组中删除。

看看没有键的数组,你就会明白我的意思。您基本上有两个值列表,['0','v2','1','text','us','1']并且['v1','v2','0','text','canada','1']. 第一个列表中唯一没有出现在第二个列表中的值是'us'.

我猜你可能想看看array_key_diff()array_diff_assoc()

于 2011-01-20T00:54:35.137 回答