PHP တွင် array_filter () သည်ခင်းကျင်းမှုတစ်ခုမှအခြေအနေများနှင့်ကိုက်ညီသောဒြပ်စင်များကိုစစ်ထုတ်ရန်အလွန်အဆင်ပြေသောလုပ်ဆောင်ချက်ဖြစ်သည်။ ဒါပေမယ့်ကျနော်တို့ (တစ်ထောင်သန်းပေါင်းများစွာသို့မဟုတ်သန်းပေါင်းများစွာသောဒြပ်စင်များပင်) နှင့်ရင်ဆိုင်နေရသောအခါစွမ်းဆောင်ရည်ပြ issues နာများထည့်သွင်းစဉ်းစားရမည့်အချက်တစ်ချက်ဖြစ်လာနိုင်သည်။
ဤဆောင်းပါးသည် Array_Filter () ၏စွမ်းဆောင်ရည်ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်လက်တွေ့ကျသောပိုမိုကောင်းမွန်သောမဟာဗျူဟာအချို့ကိုစူးစမ်းလေ့လာပါမည်။
PHP တွင် array_filter () ၏ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
$result = array_filter($array, function($value) {
return အခေြအနေ;
});
၎င်းသည် callback function ကိုတစ်ကြိမ်စီသည်ခင်းကျင်းမှု၏အစိတ်အပိုင်းတစ်ခုစီတွင်တစ်ကြိမ်ခေါ်ဆိုခြင်းနှင့် မှန်ကန်သော ပြန်လည်ရောက်ရှိသည့်ဒြပ်စင်ကိုသိမ်းဆည်းခြင်းအားဖြင့်အလုပ်လုပ်သည်။
ဆိုလိုသည်မှာ၎င်း၏အချိန်ရှုပ်ထွေးမှုသည် အို (n) ဖြစ်သည်။
ကြီးမားတဲ့ array ကြီးမားတဲ့ arrays နှင့်ဆက်ဆံရာတွင်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းသည်အောက်ပါရှုထောင့်များမှလာနိုင်သည်။
callback function ကိုကိုယ်နှောင်ခဲသည် - သင်၏ callback ယုတ္တိဗေဒသည်အလွန်ရှုပ်ထွေးပါက၎င်းသည်စွမ်းဆောင်ရည်သုံးစွဲမှုကိုနှစ်ဆတိုးလိမ့်မည်။
Memory အသုံးပြုမှု : array_filter () သည်ခင်းကျင်းမှုအသစ်တစ်ခုကိုဖန်တီးပြီးမူရင်းခင်းကျင်းမှုကိုမှတ်ဉာဏ်တွင်ဆက်လက်ထိန်းသိမ်းထားဆဲဖြစ်သောကြောင့်၎င်းသည်ကြီးမားသောဒေတာများကိုလုပ်ဆောင်သောအခါမှတ်ဉာဏ်များစွာကိုစားသုံးနိုင်သည်။
အမည်မသိလုပ်ဆောင်ချက်များကိုကျော်လွှားခြင်း - အမည်မသိလုပ်ဆောင်ချက်များသည်အလွန်ကောင်းမွန်သောစွမ်းဆောင်ရည်မြင့်မားသောအခြေအနေများတွင်အလွန်စိတ်ပိုင်းဖြတ်ထားသော်လည်းစွမ်းဆောင်ရည်မြင့်မားသောအခြေအနေများတွင်သူတို့၏ခေါ်ဆိုမှုသည်သာမန်လုပ်ဆောင်မှုများထက်အနည်းငယ်ပိုမိုမြင့်မားနိုင်သည်။
$largeArray = range(1, 1000000);
$filtered = array_filter($largeArray, function($value) {
return $value % 2 === 0;
});
ဤဥပမာရှိအခြေအနေများသည်အလွန်ရိုးရှင်းသော်လည်းအစစ်အမှန်စီမံကိန်းများတွင် callback function များသည်များသောအားဖြင့်ပိုမိုရှုပ်ထွေးပြီးလုပ်ဆောင်မှုသည်သိသိသာသာလျော့နည်းသွားလိမ့်မည်။
အကယ်. သင်သည်ရိုးရှင်းသောစစ်ဆင်ရေးလုပ်ငန်းများကိုသာလုပ်ဆောင်ရန်လိုအပ်ပါက array_fileter () ကို အစားထိုးရန် fonteach ကို သင်အသုံးပြုနိုင်ပြီး callback လုပ်ဆောင်ချက်များကြောင့်အပို overhead ကိုရှောင်ရှားနိုင်သည်။
$filtered = [];
foreach ($largeArray as $value) {
if ($value % 2 === 0) {
$filtered[] = $value;
}
}
များသောအားဖြင့်ဤနည်းလမ်းသည် array_filter () ထက်ပိုမိုထိရောက်စေသည်။
ပိတ်သိမ်း၏ overhead အနည်းငယ်မြင့်မားသည်။ သင်မကြာခဏခေါ်လျှင်, သင်ယုတ္တိဗေဒကိုအမည်ပေးထားသော function ကိုရေးနိုင်သည်။
function isEven($value) {
return $value % 2 === 0;
}
$filtered = array_filter($largeArray, 'isEven');
အကယ်. Array သည်အလွန်ကြီးမားသည်ဆိုပါကတစ်ချိန်တည်းတွင်မှတ်ဉာဏ်ပမာဏများစွာကိုမစားနိုင်စေရန်အသုတ်များပြုလုပ်ရန်အကြံပြုသည်။
$chunks = array_chunk($largeArray, 10000);
$filtered = [];
foreach ($chunks as $chunk) {
$filtered = array_merge($filtered, array_filter($chunk, 'isEven'));
}
တခါတရံကျွန်ုပ်တို့သည် PHP Layer တွင်အသုံးမကျသောအချက်အလက်များကိုရှောင်ရှားရန်ဒေတာဘေ့စ်သို့မဟုတ် interface မှတောင်းဆိုသည့်အခါဒေတာများ၏အရင်းအမြစ်၏အရင်းအမြစ်တွင်ပဏာမစစ်ထုတ်ခြင်းများပြုလုပ်နိုင်သည်။
ဥပမာအားဖြင့်:
// လမ်းပြောင်းပြန်:ဒေတာအားလုံးကိုပထမ ဦး စွာတွားသွားပြီး၎င်းကို filter လုပ်ပါ
$data = file_get_contents('https://m66.net/api/data');
$decoded = json_decode($data, true);
$filtered = array_filter($decoded, 'isEven');
// ပိုကောင်းတဲ့ချဉ်းကပ်မှု:API 参数中加入筛选အခေြအနေ
$data = file_get_contents('https://m66.net/api/data?filter=even');
$filtered = json_decode($data, true);
အချက်အလက်အားလုံးကိုတစ်ပြိုင်နက်ပြန်ပို့ရန်မလိုအပ်ပါက, သင်ကမီးစက်ကိုလွင့်ပစ်ရန်မီးစက်ကိုသုံးနိုင်သည်။
function filterEven($array) {
foreach ($array as $value) {
if ($value % 2 === 0) {
yield $value;
}
}
}
foreach (filterEven($largeArray) as $even) {
// အချိန်နှင့်တပြေးညီအပြောင်းအလဲနဲ့ $even
}
မီးစက်သည်ရလဒ်အားလုံးကိုမှတ်ဉာဏ်ထဲသို့မသိမ်းဆည်းထားပါ,
Array_Filter () သည်အလွန် syntax-concise ဖြစ်ပြီးအသေးစားနှင့်အလတ်စား array များနှင့်သင့်တော်သည်။ စွမ်းဆောင်ရည်သည် fonteach အစားထိုးခြင်း, callback ယုတ္တိဗေဒဆိုင်ရာယုတ္တိဗေဒ,
စွမ်းဆောင်ရည်အထိခိုက်မခံသောစီမံကိန်းများတွင်အချက်အလက်များကိုစစ်ထုတ်ရန်အသင့်တော်ဆုံးနည်းကိုရွေးချယ်ခြင်းသည်ကုဒ် optimization ၏သော့ချက်ဖြစ်သည်။