我需要像这样比较两个数组
// currently in our database
$firstArr = array(
["id"=>1, "another_id"=>1],
["id"=>2, "another_id"=>4],
["id"=>5, "another_id"=>9]
);
// currently fetched from csv-files
$secondArr = array(
["id"=>6, "another_id"=>3],
["id"=>2, "another_id"=>7],
["id"=>1, "another_id"=>1]
);
第一个数组表示当前在我们数据库中的数据,同时第二个表示从csv-file 传递的数据。
为了不从数据库中删除整个数据,我需要比较两个数组。如果csv-file 提供了不在数据库中的数据,我想输入这些数据集。如果数据库包含不在csv-file 中的数据,我想将它们从数据库中删除。
我想出了一个适用于数组中少量数据的解决方案:
$new_to_database = array();
foreach($secondArr AS $arr){
$in_database = array_filter(array_map(function($el) use ($arr){
if($el['id'] == $arr['id'] && $el['another_id'] == $arr['another_id']){
return $el;
}
}, $firstArr));
if(count($in_database) === 0){
$new_to_database[] = $arr;
}
}
var_dump($new_to_database); // input later on
// array(2) { [0]=> array(2) { ["id"]=> int(6) ["another_id"]=> int(3) } [1]=> array(2) { ["id"]=> int(2) ["another_id"]=> int(7) } }
问题是每个数组包含大约 5000 个数据集。结果脚本需要很长时间,并且我收到超过 360 秒的执行时间的错误。
我该如何解决这个问题?我想算法应该更有效。
慕丝7291255
温温酱