代码之家  ›  专栏  ›  技术社区  ›  Davit Zeynalyan

一个数组包含null和其他空值的数组差异问题

  •  0
  • Davit Zeynalyan  · 技术社区  · 6 年前

    我用的是拉威尔。我有两个数组。例如

    $array1 = [
        'test1',
        '',
        'test2',
        'test3',
        '',
        'test4',
        '',
    ];
    
    $array2 = [
        null
    ];
    
    dd(array_diff($array1, $array2));
    

    结果是

    array:4 [▼
      0 => "test1"
      2 => "test2"
      3 => "test3"
      5 => "test4"
    ]
    

    但我预料到了

    array:7 [▼
      0 => "test1"
      1 => ""
      2 => "test2"
      3 => "test3"
      4 => ""
      5 => "test4"
      6 => ""
    ]
    

    null is equal ''

    foreach ($array1 as $key => $value) {
        if (in_array($value, $array2, true)) {
            unset($array1[$key]);
        }
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   u_mulder    6 年前

    写在 manual :

    当且仅当(string)$elem1==(string)$elem2时,两个元素被认为相等。换句话说:当字符串表示形式相同时。

    所以,你的 null 没有 附加代码。

        2
  •  1
  •   ArtisticPhoenix    6 年前

    为了补充你所说的,你可以很容易地用这个过滤掉它们

    $array2 = array_filter($array2, function($v){
        return !is_null($v);
    });
    
        3
  •  0
  •   Jurij Veresciaka    4 年前

    您可以使用array\u udiff而不是array\u diff。

    array_udiff($array1, $array2, function ($a, $b) { return $a !== $b; })