首页 > 解决方案 > 一个数组包含空值和其他空值的数组差异问题

问题描述

我正在使用laravel。我有 2 个数组。例如

$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 => ""
]

你能问为什么在 array_diff 中考虑null is equal '',以及如何在没有任何额外代码的情况下修复它。现在我解决了这个

foreach ($array1 as $key => $value) {
    if (in_array($value, $array2, true)) {
        unset($array1[$key]);
    }
}

标签: phplaravellaravel-5

解决方案


正如手册中所写:

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

因此,您的null值被转换为空字符串,这就是您得到结果的原因。因此,如果没有额外的代码,您将无法解决您的任务。


推荐阅读