2 回答
TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
您可以按 索引每個(gè)數(shù)組,然后計(jì)算鍵中的差值:id
// Get items that are in CSV but not in database
$new = array_diff_key(array_column($csv, null, 'id'), array_column($db, null, 'id'));
// Get items that are in database but not in CSV
$del = array_diff_key(array_column($db, null, 'id'), array_column($csv, null, 'id'));
下面是一個(gè)使用兩個(gè)簡(jiǎn)單數(shù)組的演示,每個(gè)數(shù)組包含 50,000 個(gè)項(xiàng)目。
這既簡(jiǎn)短又甜蜜,但您可能不想多次運(yùn)行:array_column
$csv = array_column($csv, null, 'id');
$db = array_column($db, null, 'id');
// Get items that are in CSV but not in database
$new = array_diff_key($csv, $db);
// Get items that are in database but not in CSV
$del = array_diff_key($db, $csv);
若要比較整個(gè)數(shù)組內(nèi)容(如果只添加多個(gè)和),則可以映射每個(gè)數(shù)組并序列化為字符串表示形式并進(jìn)行比較。請(qǐng)注意,元素的順序也很重要:idanother_id
// Get items that are in CSV but not in database
$new = array_map('unserialize',
array_diff(array_map('serialize', $csv), array_map('serialize', $db)));
// Get items that are in database but not in CSV
$del = array_map('unserialize',
array_diff(array_map('serialize', $db), array_map('serialize', $csv)));
在演示站點(diǎn)上,這個(gè)適用于40,000個(gè)數(shù)組項(xiàng)目,但不是50,000個(gè)。這將取決于您的資源和設(shè)置。php.ini
還有一個(gè)array_intersect_key,如果你想看到每個(gè)數(shù)組中有什么相同,array_intersect。
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
你正在做很多循環(huán)。,并使用大量時(shí)間。foreacharray_filterarray_map
$new_to_database = array_udiff($secondArr, $firstArr, function ($s, $f) {
if ($s['id'] == $f['id'] && $s['another_id'] == $f['another_id']) {
return 0;
} else {
return -1;
}
});
這樣可以減少迭代次數(shù),從而獲得所需的結(jié)果。
- 2 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報(bào)
