Daily Php Development တွင်ခင်းကျင်းခြင်းကွဲပြားခြားနားမှုများကိုကိုင်တွယ်ခြင်းသည်ဘုံလိုအပ်ချက်ဖြစ်သည်။ Array_diff () function သည် arry နှစ်ခုအကြားခြားနားချက်ကိုရှာဖွေရန်အလွန်အဆင်ပြေသောနည်းလမ်းဖြစ်သည်။ သို့သော် developer များစွာသည် array_diff () သည် အမှန်တကယ်ထိရောက်မှုရှိပါသလား။ စွမ်းဆောင်ရည် - အထိခိုက်မခံသောအခြေအနေများတွင်ကျွန်ုပ်တို့သည်တူညီသောရည်ရွယ်ချက်ကိုရရှိရန်အတွက်ခင်းကျင်းမှုကိုကိုယ်တိုင်ဆွဲဆောင်ရန်ရွေးချယ်သင့်ပါသလား။
ဤဆောင်းပါးသည်သင်ရွေးချယ်သောရွေးချယ်မှုများပြုလုပ်ရန်ကူညီရန်အတွက် array_diff () နှင့်လက်စွဲခရီးကိုလေ့လာသုံးသပ်ခြင်းများကိုရှာဖွေတွေ့ရှိလိမ့်မည်။
Array_diff () သည် PHP မှ PHP မှပေးသော function တစ်ခုဖြစ်ပြီးပထမခင်းကျင်းမှုတွင်ထည့်သွင်းထားသည့်တန်ဖိုးများကိုနှိုင်းယှဉ်ရန်နှင့်အခြားခင်းကျင်းမှုတွင်မပါ 0 င်ပါ။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
$result = array_diff($array1, $array2);
ဥပမာအားဖြင့်:
$a = [1, 2, 3, 4];
$b = [3, 4, 5];
$result = array_diff($a, $b); // ထုတ်လုပ်ခြင်း: [0 => 1, 1 => 2]
fonteach မှတဆင့်တူညီသော function ကိုလည်းအကောင်အထည်ဖော်နိုင်သည်။
$result = [];
foreach ($a as $value) {
if (!in_array($value, $b)) {
$result[] = $value;
}
}
အသေးအဖွဲသေးငယ်သည့်အချိန် (ဥပမာ 100 အောက်ရှိသည့်အချက် 100 အောက်သာ) ဖြစ်စဉ်များကိုပြုလုပ်သောအခါနှစ်ခုအကြားစွမ်းဆောင်ရည်ကွာဟချက်မှာအနည်းဆုံးဖြစ်သည်။ array_diff () သည် Cite ကို Cite function ဖြစ်ပြီးအကန့်အသတ်ဖြင့်သာလုပ်ဆောင်နိုင်သည့် function ဖြစ်သည်။ သို့သော်ဤ overhead သေးငယ်တဲ့ arrays အတွက်နီးပါးအနည်းငယ်သာမှုမရှိ။
Array အရေအတွက်သည်ထောင်ပေါင်းများစွာသောဒြပ်စင်များပါ 0 င်သည့်အတိုင်းပိုမိုကြီးမားလာသောအခါစွမ်းဆောင်ရည်ကွာဟမှုပေါ်လာသည်။ ဤတွင်ရိုးရှင်းသောအခြေခံစံနှုန်းတစ်ခုရှိသည်:
$a = range(1, 10000);
$b = range(5000, 15000);
// အသုံးပြု array_diff
$start = microtime(true);
array_diff($a, $b);
echo 'array_diffအချိန်ကုန်စေသော: ' . (microtime(true) - $start) . " စက်ဏန့်\n";
// အသုံးပြု手动遍历
$start = microtime(true);
$result = [];
foreach ($a as $value) {
if (!in_array($value, $b)) {
$result[] = $value;
}
}
echo '手动遍历အချိန်ကုန်စေသော: ' . (microtime(true) - $start) . " စက်ဏန့်\n";
ရလဒ်များအရဒေတာ volume သည်ကြီးမားသည့် အခါ array_diff () သည် အထူးသဖြင့် ဒေါ်လာဘီ ရှိဒြပ်စင်အရေအတွက်သည်အလွန်ကြီးမားသည်။
အကယ်. သင်သည်လက်စွဲနည်းလမ်းကိုကပ်ထားပါက Contrast Array $ b ကို hash ဖွဲ့စည်းပုံသို့ပြောင်းလဲခြင်းအားဖြင့်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည် (ဥပမာ, array_flip) )
$hashMap = array_flip($b);
$result = [];
foreach ($a as $value) {
if (!isset($hashMap[$value])) {
$result[] = $value;
}
}
ဤနည်းဖြင့်စွမ်းဆောင်ရည်သည် array_diff () နှင့်နီးပါးနှင့်တစ်ခါတစ်ရံတွင်ပိုမိုမြန်ဆန်သော,
လျင်မြန်စွာနှင့် concisely နှစ်ခု array ၏ခြားနားချက်အစုံကိုင်တွယ်
မြင့်မားသောကုဒ်ဖတ်နိုင်မှုနှင့်အတူဖြစ်ရာများအတွက်အခြေအနေများ
စိတ်ကြိုက်နှိုင်းယှဉ်စျေးနှုန်းလိုအပ်သည်
ခင်းကျင်းသောဒြပ်စင်အရေအတွက်သည်အလယ်အလတ်သို့မဟုတ်ကြီးမားသောအခါ
ကျိုးကြောင်းဆီလျော်သောတရားစီရင်ချက်များကိုစိတ်ကြိုက်ပြုလုပ်ရန်လိုအပ်သည်
နှိုင်းယှဉ်မှုခင်းကျင်းမှုသည်သေးငယ်သောသို့မဟုတ်စွမ်းဆောင်ရည်ကိုအကောင်းဆုံးဖြစ်စေရန် array_flip () ကို သုံးနိုင်သည်ကိုသင်သိသည်
စွမ်းဆောင်ရည်ကိုအလွန်အမင်းထိခိုက်လွယ်ပြီးသင်ဟာ traversal ယုတ္တိဗေဒကိုကိုယ်တိုင်ညှိနိုင်သည်
Array_diff () သည်အလွန်အဆင်ပြေပြီးယေဘုယျအားဖြင့်ကောင်းမွန်သောစွမ်းဆောင်ရည်ကောင်းတစ်ခုဖြစ်သည်။ သို့သော်၎င်းသည်အမြဲတမ်းအကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပါ။ လက်စွဲလူးလက်စွဲကိုကျိုးကြောင်းဆီလျော်သောအချက်အလက်များ (ဥပမာ hash ဇယားများကဲ့သို့) ပိုမိုလွယ်ကူစွာထိန်းချုပ်မှုသို့မဟုတ်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန်လိုအပ်သည့်အခါပိုမိုအကျိုးရှိနိုင်သည်။
သတိရပါ, အကောင်းဆုံး optimization ၏အဓိကအချက်မှာ "ပိုမိုမြန်ဆန်သော" နည်းလမ်းကိုမျက်စိကန်းစွာလိုက်စားခြင်းထက် မြင်ကွင်းအပေးအယူအပေးအယူများပေါ်တွင်အခြေခံသည် ။