我正在使用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]);
}
}
答案 0 :(得分:2)
写在manual中:
当且仅当(string)$ elem1 ===(string)$ elem2,两个元素才被视为相等。换句话说:当字符串表示相同时。
因此,您的null
值被强制转换为空字符串,这就是为什么要获得结果的原因。因此,没有其他代码就无法解决您的任务。
答案 1 :(得分:1)
要添加到所说的内容中,您可以轻松地将其过滤掉
$array2 = array_filter($array2, function($v){
return !is_null($v);
});
答案 2 :(得分:0)
您可以使用array_udiff代替array_diff。
array_udiff($array1, $array2, function ($a, $b) { return $a !== $b; })