PHP တွင် array_walk_Recursive သည် Multidimensional Array တွင် element တစ်ခုချင်းစီတွင်လုပ်ဆောင်သောလုပ်ဆောင်မှုအချို့ကိုလုပ်ဆောင်သည်။ သေးငယ်တဲ့စကေးခင်းကျင်းမှုနှင့်ဆက်ဆံရာတွင်ဤလုပ်ဆောင်မှုသည်ကောင်းမွန်စွာလုပ်ဆောင်နေစဉ်အတွင်း, Multidimensional Arrays ကိုထိထိရောက်ရောက်ကိုင်တွယ်ရန် array_walk_Recursive ကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရမည်ကိုဤဆောင်းပါးတွင်လေ့လာပါမည်။
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> &</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> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'b'</span></span><span> => [
</span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'d'</span></span><span> => </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(&</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] => </span><span><span class="hljs-number">2</span></span><span>
[b] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[c] => </span><span><span class="hljs-number">4</span></span><span>
[d] => </span><span><span class="hljs-number">6</span></span><span>
)
)
</span></span>
Array_walk_Recursive သည်အလွန်အဆင်ပြေပြီးအဆင်ပြေသော function တစ်ခုဖြစ်သော်လည်းအထူးသဖြင့်အချက်အလက်အမြောက်အများကိုကိုင်တွယ်ရာတွင်စွမ်းဆောင်ရည်ပြောင်ပြောင်တင်းတင်းအချို့ရှိသည်။
recursive call overhead : array_walk_recsive သည် Multidimensional Arrays ကိုဖြတ်သန်းရန်အတွက်မူတည်သည်။ Refice ခေါ်ဆိုမှုတစ်ခုစီသည် function stack ၏အတိမ်အနက်ကိုတိုးစေသည်။ ခင်းကျင်းသောအလွှာများသည်နက်နက်ရှိုင်းရှိုင်းနေသည့်အခါ၎င်းသည်ထုပ်ပိုးခြင်းသို့မဟုတ်စွမ်းဆောင်ရည်ပျက်စီးခြင်းကိုဖြစ်ပေါ်စေနိုင်သည်။
ထပ်ခါတလဲလဲတွက်ချက်မှု - အချို့သောကိစ္စရပ်များတွင် Array_walk_RECRECRECRECRECRECTERS သည် array ၏အလွှာတစ်ခုစီတွင်လည်ပတ်သည်။ အကယ်. စစ်ဆင်ရေးသည်ရှုပ်ထွေးသောသို့မဟုတ်ခင်းကျင်းသည်ဆိုပါက၎င်းသည်စွမ်းဆောင်ရည်ကိုသိသိသာသာအကျိုးသက်ရောက်လိမ့်မည်။
array_walk_Recursive ၏စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန်အောက်ပါနည်းဗျူဟာများကိုကျွန်ုပ်တို့ကြိုးစားနိုင်သည်။
ပထမ ဦး စွာကျွန်ုပ်တို့သာပြန်လည်ပြုပြင်ခြင်းအပြောင်းအလဲလုပ်ရန်လိုအပ်သည့် 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">&<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> => &</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> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'b'</span></span><span> => [
</span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'d'</span></span><span> => </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 ၏အနက်ကိုပိုမိုတိကျစွာထိန်းချုပ်နိုင်သည်။
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 (&</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 သည်အချက်အလက်များပွားများပွားများစွာကိုရှောင်ရှားပြီးမှတ်ဉာဏ်အသုံးပြုမှုကိုလျော့နည်းစေသည်။
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">&<span class="hljs-variable">$array</span></span></span><span>) {
</span><span><span class="hljs-variable">$stack</span></span><span> = [&</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> => &</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>[] = &</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> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'b'</span></span><span> => [
</span><span><span class="hljs-string">'c'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'d'</span></span><span> => </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 ကိုအသုံးပြုသည်။
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 များကိုအကောင်းဆုံးဖြစ်စေသည့်အခါ,
Array_walk_Recursive သည်အလွန်အစွမ်းထက်သော function တစ်ခုဖြစ်သော်လည်းကြီးမားသောခင်းကျင်းမှုများကိုကိုင်တွယ်ရန်အမြဲတမ်းအကောင်းဆုံးမဟုတ်ပါ။ မလိုအပ်သောရလာဒ်များကိုရှောင်ကြဉ်ခြင်းအားဖြင့်ကိုးကားချက်များကိုအသုံးပြုခြင်း, stack depth ကိုအသုံးပြုခြင်းနှင့်အခြားခင်းကျင်းမှုများကိုအသုံးပြုခြင်းသည်ကျွန်ုပ်တို့၏ကုဒ်၏ကွပ်မျက်မှုများကိုထိရောက်စွာတိုးတက်စေနိုင်သည်။
ရှုထောင့်အမျိုးမျိုး၏ဖြတ်သန်းမှုကိုအကောင်းဆုံးစွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေသောအခါ recursive ခေါ်ဆိုမှုများ overhead ကိုလျှော့ချရန်နှင့် array element များကိုအကြိမ်ပေါင်းများစွာမကူးယူပါနှင့်။ ကြီးမားသောအရေးယူမှုများနှင့်ကြုံတွေ့ရသောအခါ Retursion နှင့်အခြားပိုမိုထိရောက်သောဖြေရှင်းနည်းများဖြင့်ပြန်လည်နေရာချထားရေးကိုသုံးသပ်ကြည့်ပါ။