我有两个数组,我使用array_diff_assoc()
来获取差值,但它总是在结果中返回common set
行
它应该返回new q sets
行。我的方法有什么问题吗?
样本数据:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
]
$array2 => [
[11 => 'common set']
];
在调用array_diff_assoc($array1, $array2)
之后,我的输出是:
[
[11 => 'common set']
]
3条答案
按热度按时间1zmg4dgp1#
key =〉value对中的两个值只有当
(string) $elem1 === (string) $elem2
时才被认为相等。换句话说,严格检查发生,因此字符串表示必须相同。http://php.net/manual/en/function.array-diff-assoc.php
The
(string)
value of any array is"Array"
.因此,对array_diff_assoc
的调用实际上是在比较这两件事:由于这两个数组之间的不同之处在于第一个数组中的
[1]
键/值对,因此您可以将其返回([1] => Array( [11] => common set )
)。uubf1zoe2#
在array_diff_assoc()中,键也被比较。因为[0]在第二个数组中可用,而[1]在第二个数组中不可用,所以这就是为什么结果是Array([1] =〉Array([11] =〉common set))。
e4yzc0pl3#
当在现代php环境中运行脚本时,警告应该表明您使用了错误的工具。
错误代码:(Demo)
错误输出:
您实际上并不想比较第一级索引,因为相关/匹配的行可能有不同的第一级索引。
相反,您应该使用
array_udiff()
来比较关联行(并忽略第一级键)。进行三向比较-正如array_udiff()
从回调中期望的那样-使用“飞船操作符”可以不迭代函数调用。在下面的代码片段中,$a
和$b
表示数据行。正确代码:(Demo)
正确输出: