လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> စွမ်းဆောင်ရည်အကောင်းမြင် - အဘယ်အခြေအနေများအောက်တွင် array_diff () ကိုလက်ဖြင့်ဖြတ်သန်းခြင်းထက်ပိုမိုထိရောက်သောနည်း။

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

M66 2025-05-17

Daily Php Development တွင်ခင်းကျင်းခြင်းကွဲပြားခြားနားမှုများကိုကိုင်တွယ်ခြင်းသည်ဘုံလိုအပ်ချက်ဖြစ်သည်။ Array_diff () function သည် arry နှစ်ခုအကြားခြားနားချက်ကိုရှာဖွေရန်အလွန်အဆင်ပြေသောနည်းလမ်းဖြစ်သည်။ သို့သော် developer များစွာသည် array_diff () သည် အမှန်တကယ်ထိရောက်မှုရှိပါသလား။ စွမ်းဆောင်ရည် - အထိခိုက်မခံသောအခြေအနေများတွင်ကျွန်ုပ်တို့သည်တူညီသောရည်ရွယ်ချက်ကိုရရှိရန်အတွက်ခင်းကျင်းမှုကိုကိုယ်တိုင်ဆွဲဆောင်ရန်ရွေးချယ်သင့်ပါသလား။

ဤဆောင်းပါးသည်သင်ရွေးချယ်သောရွေးချယ်မှုများပြုလုပ်ရန်ကူညီရန်အတွက် 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;
    }
}

စွမ်းဆောင်ရည်နှိုင်းယှဉ်ခွဲခြမ်းစိတ်ဖြာ

1 ။ သေးငယ်တဲ့ arrays ၏စွမ်းဆောင်ရည်ကွာဟချက်

အသေးအဖွဲသေးငယ်သည့်အချိန် (ဥပမာ 100 အောက်ရှိသည့်အချက် 100 အောက်သာ) ဖြစ်စဉ်များကိုပြုလုပ်သောအခါနှစ်ခုအကြားစွမ်းဆောင်ရည်ကွာဟချက်မှာအနည်းဆုံးဖြစ်သည်။ array_diff () သည် Cite ကို Cite function ဖြစ်ပြီးအကန့်အသတ်ဖြင့်သာလုပ်ဆောင်နိုင်သည့် function ဖြစ်သည်။ သို့သော်ဤ overhead သေးငယ်တဲ့ arrays အတွက်နီးပါးအနည်းငယ်သာမှုမရှိ။

2 ။ ကြီးမားသော 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 () သည် အထူးသဖြင့် ဒေါ်လာဘီ ရှိဒြပ်စင်အရေအတွက်သည်အလွန်ကြီးမားသည်။

3 ။ လက်စွဲနည်းလမ်းများ၏လမ်းကိုပိုကောင်းအောင်လုပ်ပါ

အကယ်. သင်သည်လက်စွဲနည်းလမ်းကိုကပ်ထားပါက Contrast Array $ b ကို hash ဖွဲ့စည်းပုံသို့ပြောင်းလဲခြင်းအားဖြင့်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည် (ဥပမာ, array_flip) )

 $hashMap = array_flip($b);
$result = [];

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

ဤနည်းဖြင့်စွမ်းဆောင်ရည်သည် array_diff () နှင့်နီးပါးနှင့်တစ်ခါတစ်ရံတွင်ပိုမိုမြန်ဆန်သော,

ဘယ်အချိန်မှာ array_diff () ကိုအသုံးပြုသင့်သလဲ

array_diff () ကို သုံးရန်လည်းအကြံပြုပါသည်။

  • လျင်မြန်စွာနှင့် concisely နှစ်ခု array ၏ခြားနားချက်အစုံကိုင်တွယ်

  • မြင့်မားသောကုဒ်ဖတ်နိုင်မှုနှင့်အတူဖြစ်ရာများအတွက်အခြေအနေများ

  • စိတ်ကြိုက်နှိုင်းယှဉ်စျေးနှုန်းလိုအပ်သည်

  • ခင်းကျင်းသောဒြပ်စင်အရေအတွက်သည်အလယ်အလတ်သို့မဟုတ်ကြီးမားသောအခါ

၎င်းကို manual method ကိုအသုံးပြုရန်အကြံပြုသည်။

  • ကျိုးကြောင်းဆီလျော်သောတရားစီရင်ချက်များကိုစိတ်ကြိုက်ပြုလုပ်ရန်လိုအပ်သည်

  • နှိုင်းယှဉ်မှုခင်းကျင်းမှုသည်သေးငယ်သောသို့မဟုတ်စွမ်းဆောင်ရည်ကိုအကောင်းဆုံးဖြစ်စေရန် array_flip () ကို သုံးနိုင်သည်ကိုသင်သိသည်

  • စွမ်းဆောင်ရည်ကိုအလွန်အမင်းထိခိုက်လွယ်ပြီးသင်ဟာ traversal ယုတ္တိဗေဒကိုကိုယ်တိုင်ညှိနိုင်သည်

အကျဉ်းချုပ်

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

သတိရပါ, အကောင်းဆုံး optimization ၏အဓိကအချက်မှာ "ပိုမိုမြန်ဆန်သော" နည်းလမ်းကိုမျက်စိကန်းစွာလိုက်စားခြင်းထက် မြင်ကွင်းအပေးအယူအပေးအယူများပေါ်တွင်အခြေခံသည်