လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့် array အတွက်အရာဝတ်ထုကိုရေတွက်လို့မရပါဘူး?

အဘယ်ကြောင့် array အတွက်အရာဝတ်ထုကိုရေတွက်လို့မရပါဘူး?

M66 2025-06-07

PHP သည်ကျယ်ပြန့်စွာအသုံးပြုသော server-side programming languities ဖြစ်သည်။ array_count_valuates function သည်အလွန်အသုံးများသော functioning တစ်ခုဖြစ်သည်။ Array_count_VARITES_VARITESTIRE function ၏ function သည် array ရှိ element အားလုံး၏အဖြစ်အပျက်များကိုရေတွက်ရန်ဖြစ်သည်။ ၎င်းသည်မူလခင်းကျင်းမှုရှိသည့်သော့ချက်ဖြစ်ပြီးတန်ဖိုးသည် element ၏အဖြစ်အပျက်များ၏အရေအတွက်ဖြစ်သည်။ သို့သော်အရာဝတ်ထုများပါ 0 င်သော array များနှင့်ဆက်ဆံရာတွင်မမျှော်လင့်သောအပြုအမူအချို့ကိုကြုံတွေ့ရနိုင်သည်,

1 ။ array_count_values ​​function ကိုဘယ်လိုအလုပ်လုပ်သလဲ

Array_count_values ​​function ၏အခြေခံလုပ်ဆောင်ချက်သည်ခင်းကျင်းမှုမှတစ်ဆင့် array မှတစ်ဆင့်ဆက်နွယ်ပြီးဒြပ်စင်တစ်ခုစီ၏အရေအတွက်ကိုရေတွက်ရန်နှင့်ရလဒ်ကိုသော့ချက်တန်ဖိုးအတွဲများပုံစံဖြင့်ပြန်လည်ရောက်ရှိသည်။ ဥပမာအားဖြင့်, ကျွန်ုပ်တို့တွင်ရိုးရှင်းသောခင်းကျင်းမှုရှိသည်ဆိုပါစို့။

 $array = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'];
$result = array_count_values($array);
print_r($result);

output ကိုဖြစ်လိမ့်မည်:

 Array
(
    [apple] => 2
    [banana] => 3
    [orange] => 1
)

သင်မြင်နိုင်သည့်အတိုင်း Array_Count_VALICT_VALUTESED သည် element တစ်ခုစီ၏အဖြစ်အပျက်များကိုမှန်ကန်စွာရေတွက်သည်။

2 ။ ခင်းကျင်းမှုတစ်ခုမှအရာဝတ်ထုများသည်အဘယ်ကြောင့်မတိကျသောရေတွက်ခြင်းကိုဖြစ်ပေါ်စေသည်။

PHP Array တွင်အရာဝတ်ထုများကိုသိမ်းဆည်းသည့်အခါ array_count_valuating function သည်မျှော်လင့်ထားသည့်အတိုင်းပြုမူမည်မဟုတ်ပါ။ ဘာကြောင့်လဲဆိုတော့အရာဝတ်ထုတွေကိုရည်ညွှန်းပြီးဖြတ်သန်းသွားပြီ, PHP ရှိအရာဝတ်ထုများကို၎င်းတို့၏မှတ်ဉာဏ်လိပ်စာ (သူတို့၏တန်ဖိုးအတိုင်း) နှင့်နှိုင်းယှဉ်သည်။ ဆိုလိုသည်မှာအရာဝတ်ထုနှစ်ခုသည်အတူတူပင်ကြည့်လျှင်ပင်သူတို့၏မှတ်ဉာဏ်လိပ်စာများသည်ကွဲပြားခြားနားပြီး၎င်းတို့သည်ကွဲပြားခြားနားသောအရာဝတ်ထုများကိုထည့်သွင်းစဉ်းစားလိမ့်မည်။

ရိုးရှင်းတဲ့ဥပမာတစ်ခုကိုကြည့်ရအောင်။

 class Fruit {
    public $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

$apple1 = new Fruit('apple');
$apple2 = new Fruit('apple');

$array = [$apple1, $apple2, $apple1];
$result = array_count_values($array);
print_r($result);

output ရလဒ် -

 Array
(
    Object(Fruit)#1 => 2
    Object(Fruit)#2 => 1
)

ကျွန်ုပ်တို့တွင်အမည်တူသော Apple Objects နှစ်ခုရှိသော်လည်း၎င်းတို့သည်ကွဲပြားခြားနားသောသာဓကနှစ်ခုဖြစ်သောကြောင့် (I.E. , ကွဲပြားခြားနားသောမှတ်ဥာဏ်လိပ်စာများ), array_count_valuates သည် ၎င်းတို့ကိုကွဲပြားသောဒြပ်စင်များအဖြစ်သတ်မှတ်ပြီး၎င်းတို့ကိုသီးခြားစီဟုသတ်မှတ်သည်။

3 ။ array_count_valuate နှင့်အရာဝတ်ထုခင်းကျင်း၏တိကျသောသက်ရောက်မှု

array_count_values ​​များ ကိုအသုံးပြုပြီးအရာဝတ်ထုများပါ 0 င်သောအရာဝတ်ထုများကိုလုပ်ဆောင်ရန်ကြိုးစားသောအခါအရာဝတ်ထုတစ်ခုစီ၏မှတ်ဉာဏ်လိပ်စာကိုဆိုလိုသည်။ ၎င်းသည်အောက်ပါပြ problems နာများကိုဖြစ်ပေါ်စေနိုင်သည်။

  • အကယ်. သင့်တွင်အရာဝတ်ထုတူညီသောအကြောင်းအရာများနှင့်အတူအရာ 0 န်ာတာများရှိပါက၎င်းတို့ကိုကွဲပြားခြားနားသောအသုံးအနှုန်းများအဖြစ်သတ်မှတ်ခံရလိမ့်မည်

  • အကယ်. သင်သည်တူညီသောအတန်းအစား၏အရာဝတ်ထုဖြစ်ရပ်မျိုးစုံကိုအသုံးပြုပါကဤအရာဝတ်ထုများ၏ဂုဏ်သတ္တိများသည်အတိအကျတူညီနေလျှင်ပင် array_count_values ​​သည် ၎င်းတို့အားတူညီသောအရာများကိုတူညီသောအရာများကိုတူညီသော element များအဖြစ်ဆက်ဆံလိမ့်မည်မဟုတ်ပါ။

4 ။ ဒီပြ problem နာကိုဘယ်လိုဖြေရှင်းရမလဲ။

array ပါဝင်သောအရာဝတ်ထုများကိုမှန်ကန်စွာလုပ်ဆောင်ရန်အောက်ပါနည်းလမ်းများကိုအောက်ပါနည်းလမ်းများကိုရယူနိုင်ပါသည်။

  1. __TOSTRING နည်းလမ်းကိုပြန်လည်ရေးပါ

    အကယ်. အရာဝတ်ထုတွင်ထူးခြားသော string တစ်ခု၏ကိုယ်စားပြုမှုကိုကိုယ်စားပြုပါကအရာဝတ်ထု၏ __tostTring method ကို object လုပ်ရန်အရာဝတ်ထု၏ __tostring method ကို override လုပ်နိုင်သည်

     class Fruit {
        public $name;
        public function __construct($name) {
            $this->name = $name;
        }
        public function __toString() {
            return $this->name;
        }
    }
    
    $apple1 = new Fruit('apple');
    $apple2 = new Fruit('apple');
    $array = [$apple1, $apple2, $apple1];
    $result = array_count_values($array);
    print_r($result);
    

    output ရလဒ်ဖြစ်လိမ့်မည်:

     Array
    (
        [apple] => 3
    )
    

    ၎င်းသည်သင့်အားနာမည်တူသည့်အရာဝတ်ထုများကိုမှန်ကန်စွာရေတွက်ရန်ခွင့်ပြုသည်။

  2. array_map နှင့် serialize ကို သုံးပါ

    __tostTring method ကိုအားမလွယ်ကူလိုပါကအရာဝတ်ထုကို string တစ်ခုသို့ပြောင်းလဲရန် serialize ကို သုံး နိုင်သည်။

     $array = [serialize($apple1), serialize($apple2), serialize($apple1)];
    $result = array_count_values($array);
    print_r($result);
    

    output ကိုဖြစ်လိမ့်မည်:

     Array
    (
        [O:6:"Fruit:..."] => 3
    )
    

    ဤနည်းလမ်းတွင်ကျွန်ုပ်တို့သည်အရာဝတ်ထုကို serialize အားဖြင့်ထူးခြားသော string တစ်ခုအဖြစ်ပြောင်းလဲခြင်းဖြင့် array_count_valuates သည် တူညီသောအရာဝတ်ထုအရေအတွက်ကိုမှန်ကန်စွာတွက်ချက်နိုင်ရန်အတွက်ထူးခြားသော string တစ်ခုအဖြစ်ပြောင်းလဲနိုင်သည်။

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

array_count_values ​​ကို သုံးသောအခါ array_count_count_valuates သည် အရာဝတ်ထုများကိုတူညီသောအကြောင်းအရာများနှင့်နှိုင်းယှဉ်လျှင်အရာဝတ်ထုများကိုတူညီသောအကြောင်းအရာများဖြင့်မရေတွက်နိုင်ပါ။ ဤပြ problem နာကို __tostring နည်းလမ်းကို overwrite လုပ်ခြင်းသို့မဟုတ် Serialize နည်းလမ်းကိုအသုံးပြုခြင်းအားဖြင့်ထိရောက်စွာဖြေရှင်းနိုင်ပြီး array_count_valuates သည် အရာဝတ်ထုခင်းကျင်းအတွင်းရှိဒြပ်စင်များမှန်ကန်စွာရေတွက်သည်။