第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

比較兩個(gè)多維和關(guān)聯(lián)數(shù)組并得到差異

比較兩個(gè)多維和關(guān)聯(lián)數(shù)組并得到差異

PHP
森欄 2022-08-05 16:12:22
我需要像這樣比較兩個(gè)數(shù)組// 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]);第一個(gè)數(shù)組表示當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù),而第二個(gè)數(shù)組表示從 -file 傳遞的數(shù)據(jù)。csv為了不從數(shù)據(jù)庫(kù)中刪除整個(gè)數(shù)據(jù),我需要比較兩個(gè)數(shù)組。如果 -file 提供的數(shù)據(jù)不在數(shù)據(jù)庫(kù)中,我想輸入這些數(shù)據(jù)集。如果數(shù)據(jù)庫(kù)包含的數(shù)據(jù)不在 -file 中,我想從數(shù)據(jù)庫(kù)中刪除它們。csvcsv我想出了一個(gè)適用于數(shù)組中少量數(shù)據(jù)的解決方案:$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) } }問(wèn)題是每個(gè)數(shù)組都包含大約5000個(gè)數(shù)據(jù)集。結(jié)果,腳本需要很長(zhǎng)時(shí)間,我得到的錯(cuò)誤是超過(guò)了360秒的執(zhí)行時(shí)間。我該如何解決這個(gè)問(wèn)題?我想算法應(yīng)該更有效率。
查看完整描述

2 回答

?
catspeake

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。


查看完整回答
反對(duì) 回復(fù) 2022-08-05
?
慕虎7371278

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é)果。


查看完整回答
反對(duì) 回復(fù) 2022-08-05
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)