PHP တွင် array_filter () သည် callback function ကို အခြေခံ. arrays များကို filter လုပ်နိုင်သောအလွန်အစွမ်းထက်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်လည်းအလားတူ filtering ယုတ္တိဗေဒများကိုနေရာများစွာတွင်အသုံးပြုသောအမည်ဝှက်သည့်လုပ်ဆောင်ချက်များကိုတိုက်ရိုက်ရေးသားခြင်းသည်ကုဒ်နံပါတ်နှင့်ပြုပြင်ထိန်းသိမ်းမှုကိုတိုက်ရိုက်ရေးသားခြင်းမရှိပါ။ ဤဆောင်းပါးသည် array_filter () စစ်ထုတ်ခြင်းဆိုင်ရာယုတ္တိဗေဒကိုသင်၏ code ကိုပိုမိုကြော့ရှင်းရှင်းလင်းနိုင်သောနှင့်ထိန်းသိမ်းရန်ပြန်လည်သုံးသပ်နိုင်သောအစိတ်အပိုင်းတစ်ခုအဖြစ်ဘယ်လို adapsate လုပ်နည်းကိုမိတ်ဆက်ပေးလိမ့်မည်။
အခြေခံအကျဆုံးအသုံးပြုမှုကိုအရင်ကြည့်ကြစို့။
$data = [1, 2, 3, 4, 5];
// ပင်နံပါတ်များကို filter
$filtered = array_filter($data, function($item) {
return $item % 2 === 0;
});
print_r($filtered);
အထက်ဖော်ပြပါကုဒ်သည်ရိုးရှင်းသော်လည်းနေရာများစွာတွင် "စီစစ်ခြင်းပင်နံပါတ်များ" ၏ယုတ္တိဗေဒကိုလိုအပ်ပါကကျွန်ုပ်တို့သည် Code ပုံတူပွားများပြ problem နာကိုရင်ဆိုင်ရလိမ့်မည်။
ကျွန်ုပ်တို့သည်အသုံးများသော filtering logic ကိုအတန်းထဲသို့စာသင်ခန်းထဲသို့ချထားနိုင်ပြီးပြန်လည်သုံးသပ်ရန်အတွက်၎င်းကိုစည်းလုံးညီညွတ်သော interface မှတဆင့်ခေါ်ဆိုနိုင်သည်။
class ArrayFilter
{
protected array $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function filter(callable $callback): array
{
return array_filter($this->data, $callback);
}
}
မည်သို့အသုံးပြုရမည်နည်း
$data = [1, 2, 3, 4, 5];
$filter = new ArrayFilter($data);
$result = $filter->filter(function ($item) {
return $item % 2 === 0;
});
print_r($result);
ယုတ္တိဗေဒကိုထပ်မံလျှော့ချရန်ကျွန်ုပ်တို့သည် filter များ၏အခြေအနေများကို "မဟာဗျူဟာအတန်းများ" ထဲသို့ချထားနိုင်သည်။
interface FilterStrategyInterface
{
public function apply($item): bool;
}
class EvenNumberFilter implements FilterStrategyInterface
{
public function apply($item): bool
{
return $item % 2 === 0;
}
}
ထို့နောက်ဤပေါ်လစီကိုရရှိရန် ArrayFilter အတန်းကိုပြင်ဆင်ပါ။
class StrategyArrayFilter
{
protected array $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function filter(FilterStrategyInterface $strategy): array
{
return array_filter($this->data, [$strategy, 'apply']);
}
}
မည်သို့အသုံးပြုရမည်နည်း
$data = [1, 2, 3, 4, 5];
$filter = new StrategyArrayFilter($data);
$result = $filter->filter(new EvenNumberFilter());
print_r($result);
ဤနည်းအားဖြင့်စီခြင်းဆိုင်ရာယုတ္တိဗေဒတစ်ခုစီသည်စာသင်ခန်းတစ်ခုအနေနှင့်သီးခြားစီ သတ်မှတ်. လွယ်ကူစွာစမ်းသပ်ခြင်းနှင့်ပြန်လည်အသုံးပြုခြင်းအတွက်ကောင်းမွန်သောကုဒ်အဖွဲ့အစည်းဖွဲ့စည်းပုံကိုအကောင်အထည်ဖော်နိုင်သည်။
အကယ်. သင်သည်ပိုမိုပြောင်းလွယ်ပြင်လွယ်များကိုပြုပြင်လွယ်စေလိုပါက (ပြင်ဆင်မှုဖိုင်များအပေါ် အခြေခံ. မူဝါဒများ) ကိုရွေးချယ်လိုပါက "Factory Class" သို့မဟုတ် "0 န်ဆောင်မှုဆိုင်ရာမှတ်ပုံတင်ခြင်းယန္တရား" ကိုထည့်နိုင်သည်။ ဤတွင်ရိုးရှင်းသောဝန်ဆောင်မှုမှတ်ပုံတင်ခြင်းဥပမာတစ်ခု -
class FilterFactory
{
public static function create(string $type): FilterStrategyInterface
{
return match ($type) {
'even' => new EvenNumberFilter(),
default => throw new InvalidArgumentException("Unknown filter type: $type")
};
}
}
အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
$filterType = 'even'; // configuration သို့မဟုတ်အသုံးပြုသူ input ကိုမှယူဆ
$strategy = FilterFactory::create($filterType);
$filter = new StrategyArrayFilter([1, 2, 3, 4, 5]);
$result = $filter->filter($strategy);
print_r($result);
array_filter ၏ callback function ကို callback function ကို encapsulating အားဖြင့်ကျွန်ုပ်တို့သည် Class ကိုစာသင်ခန်းထဲသို့ချုံ့ခြင်းအားဖြင့် Code struction ကိုစမ်းသပ်ရန်နှင့်ထိန်းသိမ်းရန်ပိုမိုလွယ်ကူနိုင်သည်။ ဤနည်းဗျူဟာပုံစံသည်အထူးသဖြင့်ကြီးမားသော application များ၌ရှုပ်ထွေးသောသို့မဟုတ် variable filesing logic ကိုကိုင်တွယ်ရန်အလွန်သင့်လျော်သည်။