<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Pre-Code ဥပမာ,ဆောင်းပါး၏အကြောင်းအရာနှင့်အတူလုပ်ဖို့ဘာမျှမရှိပါတယ်</span></span><span>
</span><span><span class="hljs-variable">$exampleArray</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(fn(</span><span><span class="hljs-variable">$x</span></span><span>) => </span><span><span class="hljs-variable">$x</span></span><span> * </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-variable">$exampleArray</span></span><span>));
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
တည်နေPHPကြီးမားသောဒေတာကို processing အခါ,`array_map` ဒါဟာအလွန်အဆင်ပြေတဲ့ function တစ်ခုပါ,၎င်းသည် array ရှိ Element တစ်ခုချင်းစီ၏ callback လုပ်ဆောင်ချက်များကိုလျင်မြန်စွာအသုံးပြုနိုင်သည်。မည်မှျပင်,ဒေတာ volume အလွန်ကြီးမားသည်,သင်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုမှအာရုံမစိုက်ပါက,အလွန်အကျွံမှတ်ဉာဏ်သုံးစွဲမှုကိုဖြစ်ပေါ်စေနိုင်သည်,မှတ်ဥာဏ်လျှံအမှားတစ်ခုပင်ပစ်。ဒီနေရာမှာအသုံးပြုရန်အချို့ရှိပါတယ် `array_map` မှတ်ဉာဏ် optimization သိကောင်းစရာများ。
</span><span><span class="hljs-comment">### 1. ဒေတာအားလုံးကိုတစ်ပြိုင်တည်းတင်ခြင်းကိုရှောင်ပါ</span></span><span>
တည်နေ处理大规模数据时,Dataset တစ်ခုလုံးကိုတစ်ချိန်တည်းတွင်မှတ်ဉာဏ်ထဲသို့မတင်ရန်ကြိုးစားပါ。batches သို့မဟုတ် generators အတွက်ဖတ်နိုင်ပါသည်(</span><span><span class="hljs-built_in">Generator</span></span><span>)မှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချရန်。ဥပမာအားဖြင့်,Generator ကို အသုံးပြု. ဝယ်လိုအားအပေါ် Array element တွေကိုထုတ်လုပ်ပါ,တစ်ချိန်ကအပြည့်အဝခင်းကျင်းထုတ်လုပ်မည့်အစား:
```php
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">largeDataGenerator</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$size</span></span></span><span>) {
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-variable">$size</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-keyword">yield</span></span><span> </span><span><span class="hljs-variable">$i</span></span><span>;
}
}
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-title function_ invoke__">largeDataGenerator</span></span><span>(</span><span><span class="hljs-number">1000000</span></span><span>) </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-comment">// ဒေတာတိုင်းအပိုင်းအစဖြစ်စဉ်ကို</span></span><span>
}
</span></span>
၎င်းကို array_map (သို့) array_map (စိတ်ကြိုက်ကြားနာခြင်း) ကိုတစ်ပြိုင်နက်တည်းဖြည့်ဆည်းရန် ARRAY_MAP သို့မဟုတ် iterator_map (စိတ်ကြိုက်ကြားနာခြင်း) နှင့်အတူအဆင့်ဆင့်တက်ခြင်းကိုပြုလုပ်နိုင်သည်။
array_map သည် array အသစ်တစ်ခုကိုပုံမှန်အားဖြင့်ပြန်ပို့လိမ့်မည်။ ဆိုလိုသည်မှာမူရင်းခင်းကျင်းမှု၏အချက်အလက်များကိုကူးယူလိမ့်မည်။ မူရင်းခင်းကျင်းသည်အလွန်ကြီးမားပါကမူရင်းခင်းကျင်းမှုကိုပြန်လည်ပြုပြင်ရန်သို့မဟုတ် memory ကိုကယ်တင်ရန် array_map အစား loop ကိုသုံးနိုင်သည်။
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> </span><span><span class="hljs-keyword">as</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-title function_ invoke__">processItem</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>); </span><span><span class="hljs-comment">// မူရင်းခင်းကျင်းကိုပြုပြင်မွမ်းမံပါ,array အသစ်များဖန်တီးခြင်းကိုဖန်တီးခြင်းကိုရှောင်ကြဉ်ပါ</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>
အကြီးအကျယ်ခင်းကျင်းနေသည့်အခါ,
<span><span><span class="hljs-variable">$processed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">'processItem'</span></span><span>, </span><span><span class="hljs-variable">$largeArray</span></span><span>);
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$largeArray</span></span><span>); </span><span><span class="hljs-comment">// မူရင်းခင်းကျင်းမှတ်ဉာဏ်အခမဲ့</span></span><span>
</span></span>
တခါတရံတွင်ကြီးမားသောအချက်အလက်များသည်ကြီးမားသောအချက်အလက်များကိုကိုင်တွယ်ရန်အကောင်းဆုံးရွေးချယ်မှုမဖြစ်နိုင်ပါ။ ဥပမာအားဖြင့်ဒေတာများသည်ကိန်းဂဏန်းတန်ဖိုးများကိုစဉ်ဆက်မပြတ်ဆက်တိုက်ဖြစ်လျှင်သို့မဟုတ် ITERATE မှ ကိုယ်စားပြုနိုင်ပါက,
<span><span><span class="hljs-variable">$fixedArray</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">SplFixedArray</span></span><span>(</span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">1000000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$fixedArray</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>] = </span><span><span class="hljs-variable">$i</span></span><span> * </span><span><span class="hljs-number">2</span></span><span>;
}
</span></span>
SplfixedArsarray သည် Memory foots ကိုပုံမှန်ခင်းကျင်းမှုထက်ပိုမိုများပြားသောကြောင့်ခင်းကျင်းစားပွဲအတွင်း၌ overhead ကိုရှောင်ရှားသောကြောင့်ဖြစ်သည်။
nesting array_map သည် multi-layer intermediate Array များကိုထုတ်လုပ်ပြီးမှတ်ဉာဏ်များစွာစားသုံးသည်။ မှတ်ဉာဏ်အမြင့်များကိုလျှော့ချရန်ကြိုးပမ်းမှုလုပ်ငန်းများကိုကွင်းဆက်များသို့မဟုတ် iterators များကိုခွဲထားနိုင်သည်။
အကြီးစားဒေတာများကိုပြုပြင်သောအခါ array_map သည်အဆင်ပြေသော်လည်းမှတ်ဉာဏ်သုံးစွဲမှုကိုအလွယ်တကူဖြစ်ပေါ်စေနိုင်သည်။ အကောင်းဆုံးနည်းလမ်းများတွင် -
0 ယ်လိုအားနှင့်ပတ်သက်သည့်အချက်အလက်များကိုထုတ်လုပ်ရန်မီးစက်ကိုသုံးပါ။
ကြီးမားသောခင်းကျင်းမှုများကိုတစ်ခါမျှမကူးယူပါနှင့်။ မူရင်းခင်းကျင်းမှုကိုတိုက်ရိုက်ပြုပြင်ရန်ကြိုးစားပါ။
အချိန်တန်လျှင်မသုံးတော့သည့်အလယ်အလတ်ကိန်းဂဏန်းများကိုလွှတ်ပါ။
Splfixedarray ကဲ့သို့ Memory-Saving Data studge များပိုမိုအသုံးပြုပါ။
Looks သို့မဟုတ် iterators များကို သုံး. multi-layer nested array_map ကို ရှောင်ပါ။
အထက်ပါနည်းလမ်းများမှတစ်ဆင့် Code ၏ရိုးရှင်းမှုကိုထိန်းသိမ်းထားစဉ်၎င်းသည်မှတ်ဉာဏ်အသုံးပြုမှုကိုသိသိသာသာလျှော့ချနိုင်ပြီးကြီးမားသောအချက်အလက်အပြောင်းအလဲများ၏တည်ငြိမ်မှုနှင့်ထိရောက်မှုကိုသိသိသာသာလျှော့ချနိုင်သည်။
<span></span>
သက်ဆိုင်သောတက်(ဂ်)များ:
array_map