လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> array_filter () စွမ်းဆောင်ရည်ခွဲခြမ်းစိတ်ဖြာခြင်း - Callback VS ပုံမှန်အပြုအမူ

array_filter () စွမ်းဆောင်ရည်ခွဲခြမ်းစိတ်ဖြာခြင်း - Callback VS ပုံမှန်အပြုအမူ

M66 2025-05-17

PHP တွင် array_filter () သည်များသောအားဖြင့်အသုံးများသော array processing processing function ဖြစ်သည်။ အဓိကအားဖြင့် acray တစ်ခုတွင် element များကို filter လုပ်ရန်အသုံးပြုသည်။ ဤလုပ်ဆောင်ချက်သည်မည်သည့်ဒြပ်စင်ကိုထိန်းသိမ်းထားသင့်ကြောင်းသတ်မှတ်သည့် optional callback function ကိုရရှိနိုင်သည်။ အကယ်. callback function ကိုမထောက်ပံ့ပါက array_filter () သည် မှားယွင်းသော , Null , 0 , အချည်းနှီးသော string နှင့် sliper array ကဲ့သို့သော "မှားယွင်းသောတန်ဖိုးများ" နှင့်အတူခင်းကျင်းထဲရှိအရာများကိုအလိုအလျောက်ဖယ်ရှားလိမ့်မည်။

ဒီတော့မေးခွန်းကတော့ တကယ်တော့အသုံးပြုမှုမှာ array_filter () ကိုပုံမှန်အပြုအမူနဲ့အကြားစွမ်းဆောင်ရည်ကွာခြားချက်ကဘာလဲ။ ဘယ်နည်းလမ်းကပိုထိရောက်နိုင်သလဲ။

ဤဆောင်းပါးသည်ဤအသုံးပြုမှုနှစ်ခု၏ကွပ်မျက်မှုနှင့်နှိုင်းယှဉ်ခြင်းအားဖြင့်စွမ်းဆောင်ရည်ရှုထောင့်မှအသေးစိတ်လေ့လာခြင်းမှအသေးစိတ်လေ့လာဆန်းစစ်ချက်ကိုပြုလုပ်လိမ့်မည်။

1 ။ အခြေခံသဟာ်ကိုပြန်လည်သုံးသပ်

 // ပုံမှန်အပြုအမူ:အဆိုပါခင်းကျင်းဖယ်ရှားလိုက်ပါ“တန်ဖိုးအတု”
$result = array_filter($array);

// callback လုပ်ဆောင်ချက်များကိုသုံးပါ:သာသာ။ ကြီးမြတ် retain 0 ၏တန်ဖိုး
$result = array_filter($array, function($value) {
    return $value > 0;
});

2 ။ စမ်းသပ်သင်္ကေတဥပမာ

ကျွန်ုပ်တို့သည်ကြီးမားသောဒြပ်စင်များစွာနှင့်အတူခင်းကျင်းထားပြီးပုံမှန်အပြုအမူနှင့် custom callback function များကို အသုံးပြု. ၎င်းတို့ကို filter လုပ်ပါ။

 function testArrayFilterDefault($array) {
    $start = microtime(true);
    $result = array_filter($array);
    return microtime(true) - $start;
}

function testArrayFilterCallback($array) {
    $start = microtime(true);
    $result = array_filter($array, function($value) {
        return $value > 0;
    });
    return microtime(true) - $start;
}

// စမ်းသပ်မှုခင်းကျင်းတည်ဆောက်ပါ,ပါဝင် 100000 ဒြပ်
$testArray = [];
for ($i = 0; $i < 100000; $i++) {
    $testArray[] = $i % 2 === 0 ? 0 : $i; // ထက်ဝက်သည် 0,ထက်ဝက်သည်整数
}

// စမ်းသပ်မှုတစ်ခုလုပ်ဆောင်ပါ
$timeDefault = testArrayFilterDefault($testArray);
$timeCallback = testArrayFilterCallback($testArray);

echo "ပုံမှန်အပြုအမူ执行时间:{$timeDefault} စက်ဏန့်\n";
echo "callback function ကိုကွပ်မျက်အချိန်:{$timeCallback} စက်ဏန့်\n";

3 ။ စွမ်းဆောင်ရည်ခွဲခြမ်းစိတ်ဖြာရလဒ်များ

အထက်တွင် script ကိုဖွင့်ပါ။ ပုံမှန်အပြုအမူသည်များသောအားဖြင့်ပုံမှန်အပြုအမူကိုပိုမိုမြန်ဆန်ကြောင်းတွေ့ရှိလိမ့်မည်။ အကြောင်းပြချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -

  • ပုံမှန်အပြုအမူကို C ဘာသာစကားအလွှာမှအကောင်အထည်ဖော်သည့်ယုတ္တိဗေဒကိုတည်ဆောက်ထားပြီးကွပ်မျက်မှုစွမ်းဆောင်ရည်မြင့်မားသည်။

  • Callback function များကိုအသုံးပြုသောအခါ PHP သည်အသုံးပြုသူသတ်မှတ်ထားသောလုပ်ဆောင်ချက်များကိုအချိန်တိုင်းခေါ်ဆိုရန်လိုအပ်သည်။

နမူနာ (တိကျသောစက်ပေါ်တွင် မူတည်. အနည်းငယ်ကွဲပြားခြားနားသော)

 ပုံမှန်အပြုအမူ执行时间:0.012345 စက်ဏန့်
callback function ကိုကွပ်မျက်အချိန်:0.035678 စက်ဏန့်

သင်မြင်နိုင်သည့်အတိုင်း ပုံမှန်အပြုအမူသည် 2 ဆပိုမိုမြန်ဆန်သည်

4 ။ ပုံမှန်အပြုအမူကိုအမြဲတမ်းအသုံးပြုသင့်သလား။

ပုံမှန်အပြုအမူသည်ပိုမိုကောင်းမွန်သော်လည်း၎င်းတွင်ကန့်သတ်ချက်များရှိသည် - "မှားယွင်းသောတန်ဖိုးများ" ကိုသာဖယ်ရှားနိုင်သည်။ အကယ်. သင်၏ filtering ယုတ္တိဗေဒသည်အနည်းငယ်ရှုပ်ထွေးမှုအနည်းငယ်သာရှုပ်ထွေးသောတန်ဖိုးများကိုထိန်းသိမ်းထားခြင်း, ချက်လက်မှတ်များ, စစ်ဆေးမှုများစသည်ဖြင့်သင် callback function ကိုလိုအပ်နေဆဲဖြစ်သည်။

ဥပမာအားဖြင့်:

 // ထူးဆန်းတန်ဖိုးများကိုစောင့်ရှောက်လော့
array_filter($array, function($v) {
    return $v % 2 !== 0;
});

၎င်းကိုပုံမှန်အပြုအမူမှတဆင့်အောင်မြင်မှုမရနိုင်ပါ။

5 ။ အစစ်အမှန်ဖြစ်ရပ်မှန် - အသုံးပြုသူများမှတင်ပြသောပုံစံဒေတာကို filter လုပ်ပါ

 $userInput = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'newsletter' => false,
];

$cleanedInput = array_filter($userInput); // 只保留非တန်ဖိုးအတု字段

// ထုတ်လုပ်ခြင်း ['name' => 'Alice']

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

 $cleanedInput = array_filter($userInput, function($value) {
    return is_string($value) && trim($value) !== '';
});

6 ။ အကျဉ်းချုပ်

ဘယ်လိုသုံးရမလဲ ပြပဲှ ပြောင်းလွယ်ပြင်လွယ် ကြည့်ရှုပါ
ပုံမှန်အပြုအမူ ? အကျိုးဖြစ်ထွန်းစေနိုင်သော ? ကန့်သတ် မှားယွင်းသောတန်ဖိုးများကိုဖယ်ရှားပါ
callback လုပ်ဆောင်ချက်များကိုသုံးပါ ? အနည်းငယ်နှေးကွေး ? ကေှးနိုင်သော စိတ်ကြိုက် filtering ယုတ္တိဗေဒ

အကြံပြုချက် - အကယ်. သင်သည်မှားယွင်းသောတန်ဖိုးများကိုဖယ်ရှားပါကပုံမှန်အပြုအမူကိုသုံးပါ။ ရှုပ်ထွေးသောယုတ္တိဗေဒလိုအပ်ပါက callback လုပ်ဆောင်ချက်များကိုအသုံးပြုရန်မလွှဲမရှောင်သာဖြစ်သည်။