လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသော Multidimensional Arrays ကိုထိရောက်စွာကိုင်တွယ်ရန် array_walk_Recursive ကိုအကောင်းမြင်နည်း။

ကြီးမားသော Multidimensional Arrays ကိုထိရောက်စွာကိုင်တွယ်ရန် array_walk_Recursive ကိုအကောင်းမြင်နည်း။

gitbox 2025-06-13

ကြီးမားသော Multidimensional Arrays ကိုထိရောက်စွာကိုင်တွယ်ရန် array_walk_Recursive ကို အကောင်းမြင်နည်း။

PHP တွင် array_walk_Recursive သည် Multidimensional Array တွင် element တစ်ခုချင်းစီတွင်လုပ်ဆောင်သောလုပ်ဆောင်မှုအချို့ကိုလုပ်ဆောင်သည်။ သေးငယ်တဲ့စကေးခင်းကျင်းမှုနှင့်ဆက်ဆံရာတွင်ဤလုပ်ဆောင်မှုသည်ကောင်းမွန်စွာလုပ်ဆောင်နေစဉ်အတွင်း, Multidimensional Arrays ကိုထိထိရောက်ရောက်ကိုင်တွယ်ရန် array_walk_Recursive ကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရမည်ကိုဤဆောင်းပါးတွင်လေ့လာပါမည်။

1 ။ array_walk_Recursive function ကိုခြုံငုံသုံးသပ်ချက်

Array_walk_Recursive ၏အခြေခံလုပ်ဆောင်ချက်မှာ Multidimensional Array မှတစ်ဆင့် reverback function ကိုအားဖြည့်ရန်နှင့် Array Element တစ်ခုစီအတွက် callback function ကိုအသုံးပြုပါ။ ဤလုပ်ဆောင်ချက်၏လက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">array_walk_recursive</span></span><span> ( </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span> , </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span> )
</span></span>
  • $ array : array function ကို (ရည်ညွှန်းခြင်းဖြင့်လွန်) function ကိုမှလွန်သွားပြီ။

  • $ callback : parameter နှစ်ခုကိုလက်ခံသော callback function ကိုပထမအချက်သည်ခင်းကျင်းခြင်း၏တန်ဖိုးသည်ခင်းကျင်း၏သော့ချက်ဖြစ်သည်။

ဥပမာအားဖြင့်, အောက်ပါကုဒ်သည်နှစ်ရှုထောင်ခင်းကျင်းမှုတွင်ပါ 0 င်သည်။

 <span><span><span class="hljs-variable">$array</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; [
        </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
        </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
    ]
];

</span><span><span class="hljs-title function_ invoke__">array_walk_recursive</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(&amp;</span><span><span class="hljs-variable">$item</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>) {
    </span><span><span class="hljs-variable">$item</span></span><span> *= </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">// Element တစ်ခုချင်းစီကိုခင်းကျင်းထဲထည့်ပါ 2</span></span><span>
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

output ရလဒ် -

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [a] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [b] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [c] =&gt; </span><span><span class="hljs-number">4</span></span><span>
            [d] =&gt; </span><span><span class="hljs-number">6</span></span><span>
        )
)
</span></span>

2 ။ array_walk_Recursive ၏ bottleneck ကိုပိုကောင်းအောင်လုပ်ပါ

Array_walk_Recursive သည်အလွန်အဆင်ပြေပြီးအဆင်ပြေသော function တစ်ခုဖြစ်သော်လည်းအထူးသဖြင့်အချက်အလက်အမြောက်အများကိုကိုင်တွယ်ရာတွင်စွမ်းဆောင်ရည်ပြောင်ပြောင်တင်းတင်းအချို့ရှိသည်။

  1. recursive call overhead : array_walk_recsive သည် Multidimensional Arrays ကိုဖြတ်သန်းရန်အတွက်မူတည်သည်။ Refice ခေါ်ဆိုမှုတစ်ခုစီသည် function stack ၏အတိမ်အနက်ကိုတိုးစေသည်။ ခင်းကျင်းသောအလွှာများသည်နက်နက်ရှိုင်းရှိုင်းနေသည့်အခါ၎င်းသည်ထုပ်ပိုးခြင်းသို့မဟုတ်စွမ်းဆောင်ရည်ပျက်စီးခြင်းကိုဖြစ်ပေါ်စေနိုင်သည်။

  2. ထပ်ခါတလဲလဲတွက်ချက်မှု - အချို့သောကိစ္စရပ်များတွင် Array_walk_RECRECRECRECRECRECTERS သည် array ၏အလွှာတစ်ခုစီတွင်လည်ပတ်သည်။ အကယ်. စစ်ဆင်ရေးသည်ရှုပ်ထွေးသောသို့မဟုတ်ခင်းကျင်းသည်ဆိုပါက၎င်းသည်စွမ်းဆောင်ရည်ကိုသိသိသာသာအကျိုးသက်ရောက်လိမ့်မည်။

3 ။ ပိုကောင်းအောင်မဟာဗျူဟာ

array_walk_Recursive ၏စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန်အောက်ပါနည်းဗျူဟာများကိုကျွန်ုပ်တို့ကြိုးစားနိုင်သည်။

3.1 မလိုအပ်သောလှိုင်ယော့ခြင်းကိုရှောင်ပါ

ပထမ ဦး စွာကျွန်ုပ်တို့သာပြန်လည်ပြုပြင်ခြင်းအပြောင်းအလဲလုပ်ရန်လိုအပ်သည့် Array အလွှာများပေါ်တွင်သာဆောင်ရွက်ရန်သေချာအောင်လုပ်ပါ။ multies-diffensional array များအတွက် array_walk or fonteach ကို တိုက်ရိုက်အသုံးပြုရန်ပိုမိုထိရောက်သည်။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">optimized_walk</span></span><span>(</span><span><span class="hljs-params">&amp;<span class="hljs-variable">$array</span></span></span><span>) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; &amp;</span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
            </span><span><span class="hljs-title function_ invoke__">optimized_walk</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);  </span><span><span class="hljs-comment">// recursive စစ်ဆင်ရေး</span></span><span>
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-variable">$value</span></span><span> *= </span><span><span class="hljs-number">2</span></span><span>;  </span><span><span class="hljs-comment">// တစ် ဦး ချင်းစီဒြပ်စင် processing</span></span><span>
        }
    }
}

</span><span><span class="hljs-variable">$array</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; [
        </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
        </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
    ]
];

</span><span><span class="hljs-title function_ invoke__">optimized_walk</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည် array_walk_Recursive ၏ rearsive overhead ကိုရှောင်ရှားပြီး recursive ၏အနက်ကိုပိုမိုတိကျစွာထိန်းချုပ်နိုင်သည်။

3.2 array element တွေကိုတိုက်ရိုက်ရည်ညွှန်း

Array_walk_Recursive တွင် callback function ၏ပထမဆုံး pareter သည် array element ၏တန်ဖိုးဖြစ်သည်။ အကယ် . သင်ခင်းကျင်းမှု၏တန်ဖိုးကိုပြင်ဆင်လိုပါကရည်ညွှန်းချက်ဖြင့် parameter ကိုကျော်ဖြတ်ရမည်။ ဤသည်ပိုကောင်းတဲ့အခါအထူးအာရုံစူးစိုက်မှုလိုအပ်ပါတယ်။

ကိုးကားချက်များကိုအသုံးပြုသောအခါမှတ်ဉာဏ်ကူးခြင်း overhead ကိုအထူးသဖြင့်ကြီးမားသော array ကြီးများနှင့်ဆက်ဆံရာတွင်လျှော့ချနိုင်သည်။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-title function_ invoke__">array_walk_recursive</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function (&amp;</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>) {
    </span><span><span class="hljs-variable">$value</span></span><span> *= </span><span><span class="hljs-number">2</span></span><span>;
});
</span></span>

ဤနည်းအားဖြင့် & $ တန်ဖိုး PAST သည်အချက်အလက်များပွားများပွားများစွာကိုရှောင်ရှားပြီးမှတ်ဉာဏ်အသုံးပြုမှုကိုလျော့နည်းစေသည်။

3.3 function call level ကိုလျှော့ချပါ

REQUILE ခေါ်ဆိုမှုတစ်ခုစီသည် function stack ၏အတိမ်အနက်ကိုတိုးစေလိမ့်မည်။ အလွန်ကျယ်ပြန့်သောအတိမ်အနက်သည်စွမ်းဆောင်ရည်ပြ problems နာများကိုဖြစ်ပေါ်စေပြီးလျှံစိမ်းများကိုပင်ဖြစ်ပေါ်စေလိမ့်မည်။ ထို့ကြောင့် recursive layer အရေအတွက်ကိုလျှော့ချခြင်းသည်စွမ်းဆောင်ရည်တိုးတက်မှုအတွက်သိသိသာသာအထောက်အကူပြုသည်။ function ခေါ်ဆိုမှုများကိုရှောင်ရှားနိုင်ပြီးအတိမ်အနက်ကိုရှောင်ရှားနိုင်သည့် Rearursion ကိုတုပရန်အတွက် Queue ( Queue ဖွဲ့စည်းပုံကိုစဉ်းစားပါ

ဥပမာ -

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">iterative_walk</span></span><span>(</span><span><span class="hljs-params">&amp;<span class="hljs-variable">$array</span></span></span><span>) {
    </span><span><span class="hljs-variable">$stack</span></span><span> = [&amp;</span><span><span class="hljs-variable">$array</span></span><span>];  </span><span><span class="hljs-comment">// recursion ကိုတုပရန် stack ကိုသုံးပါ</span></span><span>

    </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$stack</span></span><span>) {
        </span><span><span class="hljs-variable">$current</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_pop</span></span><span>(</span><span><span class="hljs-variable">$stack</span></span><span>);
        </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$current</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; &amp;</span><span><span class="hljs-variable">$value</span></span><span>) {
            </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
                </span><span><span class="hljs-variable">$stack</span></span><span>[] = &amp;</span><span><span class="hljs-variable">$value</span></span><span>;  </span><span><span class="hljs-comment">// ဒါက array တစ်ခုပါ,အဆိုပါ stack ကိုနှိပ်ပါဆက်လက်</span></span><span>
            } </span><span><span class="hljs-keyword">else</span></span><span> {
                </span><span><span class="hljs-variable">$value</span></span><span> *= </span><span><span class="hljs-number">2</span></span><span>;  </span><span><span class="hljs-comment">// E ဒြပ်စင်များ</span></span><span>
            }
        }
    }
}

</span><span><span class="hljs-variable">$array</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; [
        </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
        </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
    ]
];

</span><span><span class="hljs-title function_ invoke__">iterative_walk</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည် recursive ခေါ်ဆိုမှုများ၏ overhead ကိုရှောင်ရှားရန် Recursion ကိုတုပရန် stack stack stack stack stack structure ကိုအသုံးပြုသည်။

3.4 စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန် array_map နှင့် array_mer_merge ကို သုံးပါ

tiled multi-diamensional arrays များအတွက်, ငါတို့ခင်းကျင်းဖွဲ့စည်းပုံကိုသိလျှင်, ကျနော်တို့ rearursive စစ်ဆင်ရေးအစား array_map သို့မဟုတ် array_marge ကို သုံးနိုင်သည်။ ဤလုပ်ဆောင်ချက်များသည်များသောအားဖြင့် array_walk_Recursive ထက်ပိုမိုမြန်ဆန်သည်။

ဥပမာအားဖြင့်, array_map ကို porth လုပ်ထုံးလုပ်နည်းများကိုဖြည့်ဆည်းရန်သုံးပါ။

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$item</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span> * </span><span><span class="hljs-number">2</span></span><span>;
}, </span><span><span class="hljs-variable">$array</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

ဤနည်းလမ်းသည်တစ်ရှုထောင်ခင်းကျင်းရန်သင့်လျော်သော်လည်း Multidimensional Array များကိုအကောင်းဆုံးဖြစ်စေသည့်အခါ,

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

Array_walk_Recursive သည်အလွန်အစွမ်းထက်သော function တစ်ခုဖြစ်သော်လည်းကြီးမားသောခင်းကျင်းမှုများကိုကိုင်တွယ်ရန်အမြဲတမ်းအကောင်းဆုံးမဟုတ်ပါ။ မလိုအပ်သောရလာဒ်များကိုရှောင်ကြဉ်ခြင်းအားဖြင့်ကိုးကားချက်များကိုအသုံးပြုခြင်း, stack depth ကိုအသုံးပြုခြင်းနှင့်အခြားခင်းကျင်းမှုများကိုအသုံးပြုခြင်းသည်ကျွန်ုပ်တို့၏ကုဒ်၏ကွပ်မျက်မှုများကိုထိရောက်စွာတိုးတက်စေနိုင်သည်။

ရှုထောင့်အမျိုးမျိုး၏ဖြတ်သန်းမှုကိုအကောင်းဆုံးစွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေသောအခါ recursive ခေါ်ဆိုမှုများ overhead ကိုလျှော့ချရန်နှင့် array element များကိုအကြိမ်ပေါင်းများစွာမကူးယူပါနှင့်။ ကြီးမားသောအရေးယူမှုများနှင့်ကြုံတွေ့ရသောအခါ Retursion နှင့်အခြားပိုမိုထိရောက်သောဖြေရှင်းနည်းများဖြင့်ပြန်လည်နေရာချထားရေးကိုသုံးသပ်ကြည့်ပါ။