php - 一个数组包含空值和其他空值的数组差异问题
问题描述
我正在使用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]);
}
}
解决方案
正如手册中所写:
当且仅当 (string) $elem1 === (string) $elem2 时,才认为两个元素相等。换句话说:当字符串表示相同时。
因此,您的null
值被转换为空字符串,这就是您得到结果的原因。因此,如果没有额外的代码,您将无法解决您的任务。
推荐阅读
- android - 计算两个日期之间的分钟数
- azure - 如何使用 rest api 触发 azure 构建队列
- android - 用树莓派连接手机音频
- typescript - 此条件将始终返回 'false',因为类型 'T[keyof T]' 和 'string' 没有重叠
- jquery - Chrome 没有在 popstate 上获得会话存储
- cron - 如何在骆驼运行时动态设置石英cron表达式?
- spring - Spring Boot 和 PostgreSQL - 没有打印数据
- python - 如何在没有 Pandas 的情况下获取指定行的索引?
- python - 如何使用整数同时指定和打印数组中的项目?
- java - 具有发布-订阅、到期和持久性的 Java 缓存