【问题标题】:Should i use array_diff_assoc or ===?我应该使用 array_diff_assoc 还是 ===?
【发布时间】:2018-09-05 23:50:08
【问题描述】:

我正在尝试比较两个数组以查看它们是否已排序。 array_diff_assoc 和使用 === 运算符比较两个数组有什么区别? 它们是一样的吗?

例如

$arr_a
$arr_b

array_diff_assoc($arr_a, $arr_b)

是一样的

$arr_a === $arr_b

?

【问题讨论】:

    标签: php comparison equals-operator


    【解决方案1】:

    简单的例子告诉我们这些是不同的方法:

    $a = ['t' => 2, 'p' => 3];
    $b = ['p' => 3, 't' => 2];
    var_dump($a === $b); // false, arrays are not identical                
    var_dump(array_diff_assoc($a, $b));  
    // array(0) {} - means that there's no difference between these arrays
    // they have same keys with same values, but in different orders 
    // and for `===` order is important
    

    【讨论】:

      【解决方案2】:

      有几个不同之处。

      array_diff_assoc 返回一个数组,其中包含在 b 中未找到的 a 中的元素。

      $a = [ 1 => 'first' , 2 , 3];
      $b = [ 1 => 'first' , 2 , 4 , 3];
      var_dump(array_diff_assoc($a,$b) // [ 3 => 3 ] because in a element 3 key is 3 and in b element 3 is 4. 
      

      array_diff_assoc 也不适用于多维数组。欲了解更多信息,请访问文档array_diff_assoc

      $a === $b 除了元素的顺序之外,根据键/值对比较返回true或false,它可以与多维数组一起使用。因此,如果您需要真假比较,请使用

      $a === $b // if order and type is important 
      $a == $b  // if order and type are not important
      1 === '1' // false 
      1 == '1'  //true
      

      有关更多信息,请访问文档Array Operators

      【讨论】:

        【解决方案3】:

        还应该说明array_diff_assoc() 将进行字符串比较。这进一步强化了早期的见解,即这些技术肯定是不同的。

        仅当 (string) $elem1 === (string) $elem2 时, key => value 对中的两个值才被认为相等。换句话说,会进行严格检查,因此字符串表示形式必须相同。 PHP Docs

        代码:(Demo)

        $arr_a = [1,   false, null, 0,     '0'];
        $arr_b = ['1', null,  0,    false, 0];
        
        var_export(
            array_diff_assoc($arr_a, $arr_b)
        );
        
        echo "\n---\n";
        
        $arr_a = [1,   false, '0'];
        $arr_b = ['1', null,  0];
        
        var_export(
            array_diff_assoc($arr_a, $arr_b)
        );
        
        echo "\n---\n";
        
        var_export($arr_a === $arr_b);
        

        输出:

        array (
          2 => NULL,
          3 => 0,
        )
        ---
        array (
        )
        ---
        false
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-31
          • 1970-01-01
          • 2015-10-16
          • 2023-03-06
          • 2013-02-20
          • 2011-07-31
          • 2010-12-23
          • 2015-05-22
          相关资源
          最近更新 更多