我需要像这样比较两个数组
// 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]
);
第一个数组表示当前数据库中的数据,而第二个数组表示从 -file 传递的数据。csv
为了不从数据库中删除整个数据,我需要比较两个数组。如果 -file 提供的数据不在数据库中,我想输入这些数据集。如果数据库包含的数据不在 -file 中,我想从数据库中删除它们。csvcsv
我想出了一个适用于数组中少量数据的解决方案:
$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秒的执行时间。
我该如何解决这个问题?我想算法应该更有效率。
catspeake
慕虎7371278