【发布时间】:2020-03-16 17:05:41
【问题描述】:
我的两个数组都有超过 500 000 个元素。
我只想返回多维数组中那些不存在在索引数组中的元素。
这是我的多维数组的样子:
$new_codes = [
0 => [
'id' => 1,
'code' => 'code1',
... another values
],
1 => [
'id' => 2,
'code' => 'code2',
... another values
],
2 => [
'id' => 3,
'code' => 'code3',
... another values
]
];
另一个数组只是带有代码值的普通索引数组:
$old_codes = [
'code1',
'code2',
];
对于这个有限的示例,过滤后,$new_codes 应该只有索引 2,因为 $old_codes 数组中不存在该值。
我试过使用下面的代码,但由于数组太大,操作需要很长时间,我以为我以某种方式创建了无限循环,但似乎检查超过 500000 个元素的值是否存在于另一个也有超过 50 万个元素的数组需要很长时间。
// option 1
$new = array_filter($new_codes, function ($var) use ($old_codes) {
return !in_array($var['code'], $old_codes);
});
// option 2
$filtered = [];
foreach($new_codes as $code) {
if(in_array($code['code']){
continue;
}
$filtered[] = $code;
}
欢迎对更优化的解决方案提出任何建议。
提前致谢。
【问题讨论】:
标签: php arrays multidimensional-array filter