PHP array_diff怪异

Sam*_*aye 10 php

这是一个如此简单的问题,但PHP文档并没有解释为什么会发生这种情况.

我有这个代码:

var_dump($newattributes); var_dump($oldattributes);
var_dump(array_diff($newattributes, $oldattributes));
Run Code Online (Sandbox Code Playgroud)

为简单起见,我将省略我实际使用的大部分结构(因为每个元素长117个元素)并切入案例.

我有一个叫做的数组$newattributes,看起来像:

array(117){
    // Lots of other attributes here
    ["deleted"] => int(1)
}
Run Code Online (Sandbox Code Playgroud)

而另一个$oldattributes看起来像:

array(117){
    // Lots of other attributes here
    ["deleted"] => string(1) "0"
}
Run Code Online (Sandbox Code Playgroud)

哪个看起来不一样吧?根据array_diff:没有.我得到的输出array_diff是:

array(0) { } 
Run Code Online (Sandbox Code Playgroud)

我已阅读文档页面,但它说:

当且仅当(字符串)$ elem1 ===(字符串)$ elem2时,两个元素被认为是相等的.用文字表示:当字符串表示相同时.

而且我不确定"1"如何能够对等于"0".

所以我看到一些警告,array_diff我没有考虑到?

Don*_*eba 11

问题可能在于您正在使用关联数组:您应该尝试将以下内容用于关联数组:array_diff_assoc():

<?php 
    $newattributes = array(
       "deleted" => 1 
    );

    $oldattributes = array(
       "deleted" => "0" 
    );

    $result = array_diff_assoc($newattributes, $oldattributes);

    var_dump($result);
?>
Run Code Online (Sandbox Code Playgroud)

结果:

   array(1) {
       ["deleted"]=>
       int(1)
   }
Run Code Online (Sandbox Code Playgroud)