zoukankan      html  css  js  c++  java
  • array_diff()和array_diff_assoc()

    https://blog.csdn.net/qq_39547161/article/details/89199097

    最近在开发项目的时候有需要数据对比,然后就用到了array_diff函数,用了以后发现不是自己想要的结果。先看下面的代码。

    <?php
    $array1 = array(
    'a'    => 'caitou',
    'b'    => 1,
    'c' => '666',
    'd'    => true
    );
    $array2 = array(
    'a'    =>    'caitou',
    'b'    => 2,
    'c'    => '666',
    'd'    => true
    );
    print_r(array_diff($array1,$array2));

    期望的结果是

    Array
    (
        [b] => 1
    )

    但是输出的结果却是

    Array
    (
    )

    后来网上找了很多,看了别人的博客再细看了PHP官方文档发现是自己粗心。官方文档是这样写的

    array_diff ( array `$array1` , array `$array2` [, array `$...` ] ) : array

    对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。

    两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

    array_diff是比较两个数组的值,跟键是没有关系的。而且值比较的时候是把值转成字符串在比较的。(string)$array1['b']===(string)$array2['d']。

    注:一个布尔值 boolean 的TRUE被转换成 string 的 “1”。

    所以输出的数组是空。

    后来发现我需要的是array_diff_assoc。我们看下面的代码。

    <?php
    $array1 = array(
    'a'    => 'caitou',
    'b'    => 1,
    'c' => '666',
    'd'    => true
    );
    $array2 = array(
    'a'    =>    'caitou',
    'b'    => 2,
    'c'    => '666',
    'd'    => true
    );
    print_r(array_diff_assoc($array1,$array2));
    
    输出结果
    
    Array
    (
      [b] => 1
    )
    
    官方文档
    
    array_diff_assoc ( array `$array1` , array `$array2` [, array `$...` ] ) : array

    array_diff_assoc() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意和 array_diff() 不同的是键名也用于比较。

    键值对 key => value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

    array_diff_assoc键名也会用于比较的。如:(string)$array1['b']===(string)array2['b']。
    ————————————————
    版权声明:本文为CSDN博主「刘菜头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_39547161/article/details/89199097

  • 相关阅读:
    语义化单单的限定在html么?
    转WEB前端开发经验总结(5)
    JavaScript中的null和undefined
    文字上右下环绕广告的写法
    转自森林:最新CSS兼容方案
    转自森林:注释书写规范 Ghost
    【探讨】栈和队列
    转自森林:你是一个职业的页面重构工作者吗?
    Web标准:IE8新特性及IE8安装使用
    转载:09年腾讯校园招聘页面重构的2道面试题
  • 原文地址:https://www.cnblogs.com/rxbook/p/14592703.html
Copyright © 2011-2022 走看看