В обоих моих массивах содержится более 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.
Я пытался использовать приведенный ниже код, но поскольку массивы настолько велики, операция занимает так много времени, что Я думал, что каким-то образом создал бесконечное l oop, но кажется, что проверка, существуют ли значения для более 500000 элементов в другом массиве, который также содержит более полумиллиона элементов, занимает очень много времени.
// 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;
}
Любые предложения по более оптимизированным решениям приветствуются.
Заранее спасибо.