这是一个很简单的问题,但PHP文档并没有解释它为什么会发生。
我有这段代码:
var_dump($newattributes); var_dump($oldattributes);
var_dump(array_diff($newattributes, $oldattributes));
为简单起见,我将省略我实际使用的大部分结构(因为每个元素长117个元素)并切入案例。
我有一个名为$newattributes
的数组,它看起来像:
array(117){
// Lots of other attributes here
["deleted"] => int(1)
}
另一个叫$oldattributes
,看起来像:
array(117){
// Lots of other attributes here
["deleted"] => string(1) "0"
}
哪个看起来不一样吧?根据{{1}}:没有。我从array_diff
获得的输出是:
array_diff
我已阅读文档页面,但它说:
当且仅当(字符串)$ elem1 ===时,才认为两个元素相等 (字符串)$ elem2。用文字表示:当字符串表示相同时。
而且我不确定“1”如何反对等于“0”。
所以我看到array(0) { }
的一些警告我没有考虑到?
答案 0 :(得分:11)
问题可能在于您使用关联数组:您应该尝试将以下内容用于关联数组:array_diff_assoc():
<?php
$newattributes = array(
"deleted" => 1
);
$oldattributes = array(
"deleted" => "0"
);
$result = array_diff_assoc($newattributes, $oldattributes);
var_dump($result);
?>
结果:
array(1) {
["deleted"]=>
int(1)
}
答案 1 :(得分:2)
也发生在我身上(当价值超过一个时)
$new = array('test' => true, 'bla' => 'test' 'deleted' => 1);
$old = array('test' => true, 'deleted' => '0');
对于完整 array_diff,您需要做一些额外的工作,因为默认情况下会返回relative complement
试试这个:
array_diff(array_merge($new, $old), array_intersect($new, $old))
结果:
Array
(
[bla] => test
[deleted] => 0
)