PHP တွင် Array_diff () တွင်နှစ်ခုသို့မဟုတ်နှစ်ခုထက်ပိုသောခင်းကျင်းမှု၏တန်ဖိုးများကိုနှိုင်းယှဉ်ပြီးတန်ဖိုးများကိုပထမခင်းကျင်းမှုတွင်မပါရှိပါ။ ၎င်းသည်နေ့စဉ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အချက်အလက်များကိုစစ်ထုတ်ခြင်းနှင့်ကွဲပြားခြားနားမှုများကိုရှာဖွေခြင်းကဲ့သို့သောနေ့စဉ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အလွန်အဆင်ပြေသည်။ သို့သော်ဒေတာပမာဏပမာဏသည်ကြီးမားလာသောအခါ array_diff () သည် မည်သို့လုပ်ဆောင်သနည်း။
ပထမ ဦး စွာ array_diff () အလုပ်လုပ်သည်ကိုအလျင်အမြန်နားလည်ကြပါစို့။
$result = array_diff($array1, $array2);
ဒီ function က $ array1 ရဲ့တန်ဖိုးတစ်ခုချင်းစီကိုကျော်လွန်လိမ့်မယ်, ပြီးတော့ $ array2 ၏တန်ဖိုးတစ်ခုချင်းစီနှင့်နှိုင်းယှဉ်ပါလိမ့်မယ်။ ပုံမှန်ကတော့မတူကွဲပြားတဲ့နှိုင်းယှဉ်ချက်တွေကိုသုံးဖို့ (I.E. သုံးတယ် == အစား === ) ။ ဆိုလိုသည်မှာအချိန်တိုင်း arraiff ()) တိုင်းသည် PHP ကိုခေါ်ယူရန်လိုသည်, PHP သည် loop လုပ်ငန်းများကိုပြုလုပ်ရန်လိုအပ်ပြီးစွမ်းဆောင်ရည်မြင့်မား သောစွမ်းဆောင်ရည်ကို (n * m) သည် ဒေါ်လာ array1 နှင့် M သည်အရှည်ဖြစ်သည်။
အဲဒါကိုရိုးရှင်းတဲ့စမ်းသပ်မှုတစ်ခုကြုံတွေ့ရကြပါစို့။
<?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 ကိုဖွင့်သောအခါဆာဗာစွမ်းဆောင်ရည်ပေါ် မူတည်. စက္ကန့်အနည်းငယ်အကြားစက္ကန့်များအကြားဖြစ်သည်ကိုသင်တွေ့ရှိနိုင်သည်။
Array_diff () သည် သေးငယ်သောအရာများအတွက်ကောင်းမွန်စွာလုပ်ဆောင်နိုင်သော်လည်းသန်းနှင့်ချီသောအရာများသို့မဟုတ်ထိုထက်မကသောဒြပ်စင်များနှင့်ရင်ဆိုင်ရသောအခါစွမ်းဆောင်ရည်သိသိသာသာကျဆင်းသွားသည်။ အကယ်. သင်သည်ကြီးမားသောခင်းကျင်းမှုများကိုအမှန်တကယ်ကိုင်တွယ်ဖြေရှင်းရန်လိုအပ်ပါကဤနေရာတွင်ပိုမိုကောင်းမွန်စေသောအကြံပြုချက်များဖြစ်သည်။
<?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) ကိုရှုပ်ထွေးစေနိုင်သည်။
ဥပမာအားဖြင့်အသုံးပြုသူမှတင်ထားသောဒေတာများမှမှတ်ပုံတင်ထားသောမရှိတဲ့စာတိုက်ပုံးစာရင်းကိုစစ်ထုတ်ရန်လိုအပ်သည်။
<?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 () ကို သုံးရန်အလွန်အဆင်ပြေသော်လည်းကြီးမားသောဒေတာပမာဏကိုကိုယ်တိုင်ကိုယ်ကျပိုမိုကောင်းမွန်စေရန် ပို. စိတ်ချသည်။