လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသော arrays အတွက် array_diff () ၏စွမ်းဆောင်ရည်

ကြီးမားသော arrays အတွက် array_diff () ၏စွမ်းဆောင်ရည်

M66 2025-05-17

PHP တွင် Array_diff () တွင်နှစ်ခုသို့မဟုတ်နှစ်ခုထက်ပိုသောခင်းကျင်းမှု၏တန်ဖိုးများကိုနှိုင်းယှဉ်ပြီးတန်ဖိုးများကိုပထမခင်းကျင်းမှုတွင်မပါရှိပါ။ ၎င်းသည်နေ့စဉ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အချက်အလက်များကိုစစ်ထုတ်ခြင်းနှင့်ကွဲပြားခြားနားမှုများကိုရှာဖွေခြင်းကဲ့သို့သောနေ့စဉ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အလွန်အဆင်ပြေသည်။ သို့သော်ဒေတာပမာဏပမာဏသည်ကြီးမားလာသောအခါ array_diff () သည် မည်သို့လုပ်ဆောင်သနည်း။

1 ။ array_diff () အကျင့်ကိုကျင့်

ပထမ ဦး စွာ array_diff () အလုပ်လုပ်သည်ကိုအလျင်အမြန်နားလည်ကြပါစို့။

 $result = array_diff($array1, $array2);

ဒီ function က $ array1 ရဲ့တန်ဖိုးတစ်ခုချင်းစီကိုကျော်လွန်လိမ့်မယ်, ပြီးတော့ $ array2 ၏တန်ဖိုးတစ်ခုချင်းစီနှင့်နှိုင်းယှဉ်ပါလိမ့်မယ်။ ပုံမှန်ကတော့မတူကွဲပြားတဲ့နှိုင်းယှဉ်ချက်တွေကိုသုံးဖို့ (I.E. သုံးတယ် == အစား === ) ။ ဆိုလိုသည်မှာအချိန်တိုင်း arraiff ()) တိုင်းသည် PHP ကိုခေါ်ယူရန်လိုသည်, PHP သည် loop လုပ်ငန်းများကိုပြုလုပ်ရန်လိုအပ်ပြီးစွမ်းဆောင်ရည်မြင့်မား သောစွမ်းဆောင်ရည်ကို (n * m) သည် ဒေါ်လာ array1 နှင့် M သည်အရှည်ဖြစ်သည်။

2 ။ စွမ်းဆောင်ရည်စမ်းသပ်ခြင်း

အဲဒါကိုရိုးရှင်းတဲ့စမ်းသပ်မှုတစ်ခုကြုံတွေ့ရကြပါစို့။

 <?php
$array1 = range(1, 100000);
$array2 = range(50000, 150000);

$start = microtime(true);
$result = array_diff($array1, $array2);
$end = microtime(true);

echo "ကွဲပြားခြားနားမှုအရေအတွက်: " . count($result) . PHP_EOL;
echo "ကွပ်မျက်အချိန်: " . ($end - $start) . " စက်ဏန့်" . PHP_EOL;
?>

ဤကုဒ်တွင်ဒြပ်စင် 100000 ကျော်ပါ 0 င်သည့် array နှစ်ခုကိုနှိုင်းယှဉ်သည်။ သင်သည်ဤ script ကိုဖွင့်သောအခါဆာဗာစွမ်းဆောင်ရည်ပေါ် မူတည်. စက္ကန့်အနည်းငယ်အကြားစက္ကန့်များအကြားဖြစ်သည်ကိုသင်တွေ့ရှိနိုင်သည်။

3 ။ အကောင်းမြင်အကြံပြုချက်များ

Array_diff () သည် သေးငယ်သောအရာများအတွက်ကောင်းမွန်စွာလုပ်ဆောင်နိုင်သော်လည်းသန်းနှင့်ချီသောအရာများသို့မဟုတ်ထိုထက်မကသောဒြပ်စင်များနှင့်ရင်ဆိုင်ရသောအခါစွမ်းဆောင်ရည်သိသိသာသာကျဆင်းသွားသည်။ အကယ်. သင်သည်ကြီးမားသောခင်းကျင်းမှုများကိုအမှန်တကယ်ကိုင်တွယ်ဖြေရှင်းရန်လိုအပ်ပါကဤနေရာတွင်ပိုမိုကောင်းမွန်စေသောအကြံပြုချက်များဖြစ်သည်။

ထိရောက်မှုကိုတိုးတက်စေရန် hash ဇယားကိုသုံးပါ

 <?php
$array1 = range(1, 1000000);
$array2 = array_flip(range(500000, 1500000)); // ရှာဖွေရေးထိရောက်မှုကိုတိုးတက်စေရန်သော့များကိုသုံးပါ

$start = microtime(true);

$result = [];
foreach ($array1 as $value) {
    if (!isset($array2[$value])) {
        $result[] = $value;
    }
}

$end = microtime(true);

echo "ကွဲပြားခြားနားမှုအရေအတွက်: " . count($result) . PHP_EOL;
echo "ကွပ်မျက်အချိန်: " . ($end - $start) . " စက်ဏန့်" . PHP_EOL;
?>

ဤနည်းအား ဖြင့် အို (n) ကိုရှုပ်ထွေးစေနိုင်သည်။

4 ။ လက်တွေ့ကျသော application တစ်ခု၏ဥပမာများ

ဥပမာအားဖြင့်အသုံးပြုသူမှတင်ထားသောဒေတာများမှမှတ်ပုံတင်ထားသောမရှိတဲ့စာတိုက်ပုံးစာရင်းကိုစစ်ထုတ်ရန်လိုအပ်သည်။

 <?php
$uploadedEmails = file('https://m66.net/uploads/email_list.txt', FILE_IGNORE_NEW_LINES);
$registeredEmails = getRegisteredEmailsFromDatabase(); // တစ် ဦး ခင်းကျင်းပြန်လည်ရောက်ရှိ

$unregistered = array_diff($uploadedEmails, $registeredEmails);

foreach ($unregistered as $email) {
    echo "မှတ်ပုံတင်မထားဘူး: $email" . PHP_EOL;
}
?>

ဤဥပမာတွင်တင်ထားသောဖိုင်တွင်ထောင်ပေါင်းများစွာသို့မဟုတ်သန်းပေါင်းများစွာသောအီးမေးလ်လိပ်စာများ၌ရှိလျှင် array_diff () တွင်တိုက်ရိုက်ပါ 0 င်သည်။

နိဂုံးချုပ်အားဖြင့်

Array_diff () သည်အလွန်အမင်းအသုံးပြုရလွယ်ကူပြီးရှင်းလင်းသော semantics များရှိပြီးရှင်းလင်းသော semantics ရှိသည့်အခါ၎င်း၏စွမ်းဆောင်ရည်သည်အကောင်းဆုံးမဟုတ်ပါ။ ကြီးမားသော data volume တွင်ပိုမိုကောင်းမွန်သော Execution ထိရောက်မှုကိုရရှိနိုင်ရန်အတွက်ပိုမိုအခြေခံကျသောနည်းလမ်း (ထိုကဲ့သို့သော hash table ကိုတည်ဆောက်ခြင်း) ကို အသုံးပြု. ကွဲပြားခြားနားသောနည်းလမ်းများ အသုံးပြု. ကွဲပြားခြားနားသောလုပ်ဆောင်မှုများကိုကိုယ်တိုင်ကိုယ်ကျအကောင်အထည်ဖော်ရန်အကြံပြုသည်။

ယေဘုယျအားဖြင့် - ဒေတာပမာဏအနည်းငယ်အတွက် array_diff () ကို သုံးရန်အလွန်အဆင်ပြေသော်လည်းကြီးမားသောဒေတာပမာဏကိုကိုယ်တိုင်ကိုယ်ကျပိုမိုကောင်းမွန်စေရန် ပို. စိတ်ချသည်။