PHP တွင် Array_walk_RECRECRECRECRECRECACHION သည်အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်ဤလုပ်ဆောင်ချက်သည်အထူးသဖြင့်အချက်အလက်အမြောက်အများကိုကိုင်တွယ်သောအခါမှတ်ဉာဏ်ပေါက်ကြားမှုများဖြစ်ပေါ်စေနိုင်သည်။ မှတ်ဉာဏ်ယိုစိမ့်မှုသည်လျှောက်လွှာ၏မှတ်ဉာဏ်အသုံးပြုမှုကိုကြီးထွားစေပြီးနောက်ဆုံးတွင်စနစ်အားပျက်ကျစေနိုင်သည်။ ထို့ကြောင့် array_walk_Recursive ကို အသုံးပြုသည့်အခါမှတ်ဉာဏ်ယိုစိမ့်မှုများကိုမည်သို့ရှောင်ရှားရမည်ကိုသိရန်အလွန်အရေးကြီးသည်။
မှတ်ဉာဏ်ပေါက်ကြားမှုသည်မှတ်ဥာဏ်အတွက်လျှောက်ထားသောပရိုဂရမ်ကိုရည်ညွှန်းသည်, သို့သော်၎င်းကိုအသုံးမ 0 င်သည့်အချိန်တွင်မထုတ်ပြန်သောအခါနောက်ဆုံးတွင်ပရိုဂရမ်၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုသက်ရောက်စေသည်။ PHP တွင်မှတ်ဥာဏ်ကိုးကားချက်များ,
array_walk_Recursive function ကို array ကိုဆွဲယူပြီး element တစ်ခုစီအတွက် callback function ကိုသုံးရန်အသုံးပြုသည်။ ၎င်း၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
<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 ဖြစ်သည်။
$ callback သည်ခင်းကျင်းမှု၏ element တစ်ခုချင်းစီကိုလျှောက်ထားရန် callback function ကိုဖြစ်သည်။
ဥပမာအားဖြင့်:
<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-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-variable">$item</span></span><span> * </span><span><span class="hljs-number">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>
Execution ရလဒ်များ -
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">1</span></span><span>] => Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">6</span></span><span>
)
[</span><span><span class="hljs-meta">2</span></span><span>] => </span><span><span class="hljs-number">8</span></span><span>
)
</span></span>
ဤလုပ်ဆောင်မှုသည်အလွန်အစွမ်းထက်သော်လည်း,
array_walk_recursive ကို ရည်ညွှန်းခြင်းဖြင့် element တစ်ခုစီကိုလည်ပတ်သည်။ အထူးသဖြင့်ရှုပ်ထွေးသောအဆောက်အအုံများနှင့်ကြုံတွေ့ရသည့်အခါသင့်တော်သောမှတ်ဉာဏ်စီမံခန့်ခွဲမှုမပါဘဲဖတ်ရှုသည့်အတိုင်း array ကိုပြန်လည်ဖော်ပြသည့်အခါ၎င်းသည်ဒြပ်စင်များကိုဖတ်ပြီးပြုပြင်သည်။ အထူးသဖြင့်အညွှန်းများသို့မဟုတ်အရာဝတ်ထုအသစ်များကို callback function အတွင်းရှိအရာဝတ်ထုများကိုဖန်တီးပါကဤအရာဝတ်ထုများသည်အချိန်မီမပျက်စီးနိုင်ပါ။
သင်ဟာ callback function ထဲမှာအရာဝတ်ထုအသစ်တစ်ခုကိုဖန်တီးပြီးဒီအရာဝတ်ထုတွေကိုအတိအကျမဖျက်ဆီးဘဲသိမ်းဆည်းထားတာပါ။
<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-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-keyword">new</span></span><span> </span><span><span class="hljs-title class_">StdClass</span></span><span>(); </span><span><span class="hljs-comment">// အရာဝတ်ထုအသစ်တစ်ခုဖန်တီးပါ</span></span><span>
});
</span></span>
ဤဥပမာတွင်အရာဝတ်ထုအသစ်တစ်ခုကိုသင်ပြန်လည်ကုစားသည့်အခါတိုင်းဖန်တီးထားပြီးထိုအရာဝတ်ထုများသည်မပျက်စီးနိုင်ပါ။ အကယ်. ခင်းကျင်းသည်အလွန်ကြီးမားသည်သို့မဟုတ် recursive နက်ရှိုင်းသည်နက်ရှိုင်းသည်ဆိုလျှင်မှတ်ဉာဏ်ယိုစိမ့်မှုသည်အလွန်လေးနက်လိမ့်မည်။
array_walk_Recursive မှမှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်အကောင်းဆုံးသောအလေ့အကျင့်များမှာ -
သင်သည် callback function တွင်ယာယီ variable များကိုသို့မဟုတ်အရာဝတ်ထုများကိုဖန်တီးသောအခါသူတို့ကိုအတိအလင်းဖျက်ဆီးရန် unset () ကို သုံးပါ။ ၎င်းသည်အချိန်မီမှတ်ဉာဏ်ကိုလွတ်မြောက်စေသည်။
<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-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-keyword">new</span></span><span> </span><span><span class="hljs-title class_">StdClass</span></span><span>();
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>); </span><span><span class="hljs-comment">// အရာဝတ်ထုများကိုအချိန်မီထုံးစံ၌ဖျက်ဆီးပါ</span></span><span>
});
</span></span>
မီးစက်များသည်ခင်းကျင်းတစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်း loading မဟုတ်ဘဲခင်းကျင်းသောလမ်းစဉ်ကိုဖြတ်သန်းသွားသောနည်းဖြင့်ဖြတ်သန်းနိုင်သည့်ထိရောက်သောအခြားရွေးချယ်စရာတစ်ခုဖြစ်သည်။ မီးစက်ကိုအသုံးပြုခြင်းအားဖြင့်မှတ်ဉာဏ်ယိုစိမ့်မှုများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">recursive_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-keyword">yield</span></span><span> </span><span><span class="hljs-keyword">from</span></span><span> </span><span><span class="hljs-title function_ invoke__">recursive_walk</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>); </span><span><span class="hljs-comment">// ပြန်လည်ထူထောင်ခြင်း travarays recressively</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">yield</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-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-keyword">foreach</span></span><span> (</span><span><span class="hljs-title function_ invoke__">recursive_walk</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">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$key</span></span></span><span> => </span><span><span class="hljs-subst">$value</span></span><span>\n";
}
</span></span>
ဒြပ်စင်များ 0 ယ်လိုအားရှိသည့်ဒြပ်စင်များတင်ဆောင်ခြင်းဖြင့်မီးစက်သည်မှတ်ဉာဏ်စားသုံးမှုကိုထိရောက်စွာလျှော့ချနိုင်သည်။
callback function တွင် variable အသစ်များသို့မဟုတ်အရာဝတ်ထုအသစ်များကိုဖန်တီးခြင်းနှင့်မူရင်းခင်းကျင်းမှု၏တန်ဖိုးကိုတိုက်ရိုက်ပြုပြင်ခြင်းကိုမလိုအပ်သောမှတ်ဉာဏ် overhead ကိုရှောင်ရှားနိုင်သည်။
<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-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">// မူရင်းဒြပ်စင်ကိုတိုက်ရိုက်ပြုပြင်ပါ</span></span><span>
});
</span></span>
Callback function မှလုပ်ဆောင်သောစစ်ဆင်ရေးသည်တတ်နိုင်သမျှရိုးရှင်းလွယ်ကူပြီးသယံဇာတခွဲဝေမှုသို့မဟုတ်ရှုပ်ထွေးသောတွက်ချက်မှုများလွန်းခြင်း, ထပ်ခါတလဲလဲဖန်တီးရန်လိုသည့် callback function တွင်အရင်းအမြစ်များရှိပါက Reeturion တစ်ခုစီတွင်ထပ်ခါတလဲလဲဖန်တီးမှုကိုရှောင်ရှားရန်ကြိုးစားပါ။
<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-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-built_in">static</span></span><span> </span><span><span class="hljs-variable">$multiplier</span></span><span> = </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">// စဉ်ဆက်မပြတ်တန်ဖိုးများကိုသိုလှောင်ရန် static variable တွေကိုသုံးပါ</span></span><span>
</span><span><span class="hljs-variable">$item</span></span><span> *= </span><span><span class="hljs-variable">$multiplier</span></span><span>;
});
</span></span>
တစ်ခါတစ်ရံတွင်ခင်းကျင်းမှု၏ဒီဇိုင်းသည်စွမ်းဆောင်ရည်နှင့်မှတ်ဉာဏ်အသုံးပြုမှုကိုအကျိုးသက်ရောက်နိုင်သည်။ အလွန်နက်ရှိုင်းသောအသိုက်ဖွဲ့စည်းပုံကိုအသုံးပြုခြင်းကိုရှောင်ရှားရန်ကြိုးစားပါ။ ဖြစ်နိုင်လျှင်ဒေတာဖွဲ့စည်းပုံကိုမြှင့်တင်ရန်ရှုပ်ထွေးမှုကိုလျှော့ချရန်,
Array_walk_Recursive သည်အလွန်အဆင်ပြေသောကိရိယာတစ်ခုဖြစ်သော်လည်း, မှတ်ဉာဏ်အသုံးပြုမှုကိုထိန်းချုပ်ခြင်းဖြင့်မလိုအပ်သော variable များနှင့်အရာဝတ်ထုများကိုထိန်းချုပ်ခြင်းနှင့်မီးစက်များနှင့်အခြား optimization နည်းဗျူဟာများကိုသန့်ရှင်းရေးလုပ်ခြင်းဖြင့်မှတ်ဉာဏ်ယိုစိမ့်ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ သတိရပါ, မှတ်ဉာဏ်စီမံခန့်ခွဲမှုသည် PHP စွမ်းဆောင်ရည်အကောင်းဆုံးကိုရွေးချယ်ရန်သော့ချက်တစ်ခုဖြစ်သည်ကိုသတိရပါ။ ကျိုးကြောင်းဆီလျော်သောမှတ်ဉာဏ်အသုံးပြုမှုသည်လျှောက်လွှာ၏တည်ငြိမ်မှုနှင့်တုံ့ပြန်မှုမြန်နှုန်းကိုများစွာတိုးတက်စေနိုင်သည်။