<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဤကုဒ်၏ဤအပိုင်းသည်ဆောင်းပါး၏အကြောင်းအရာများနှင့်လုံးဝမသက်ဆိုင်ပါ,၎င်းသည်အချို့သောအစပျိုးသို့မဟုတ် placeholder ကုဒ်ဖြစ်နိုင်သည်</span></span><span>
</span><span><span class="hljs-variable">$placeholderArray</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__">shuffle</span></span><span>(</span><span><span class="hljs-variable">$placeholderArray</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"စတင်ခြင်းပြီးစီးခဲ့သည်\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment"># အသုံးပြုတဲ့အခါ strnatcmp နှင့် ksort အချိန်,စွမ်းဆောင်ရည်တိုးတက်မှုပိုကောင်းအောင်လုပ်နည်း PHP sort ထိရောက်မှု?</span></span><span>
တည်နေ PHP ဖွံ့ဖြိုးမှုအောက်မှာ,Array Sorting သည်အလွန်အသုံးများသောလည်ပတ်မှုတစ်ခုဖြစ်သည်,နှင့် `strnatcmp` နှင့် `ksort` 函数常常用于对数组按自然顺序နှင့်键名进行排序。然နှင့်,ဒေတာအသံအတိုးအကျယ်ကြီးမားတဲ့အခါ,စွမ်းဆောင်ရည်တစ်ချိုပင်ဖြစ်လာလိမ့်မည်。ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခု၏စွမ်းဆောင်ရည်ဝိသေသလက္ခဏာများကိုခွဲခြမ်းစိတ်ဖြာလိမ့်မည်,နှင့် optimization မဟာဗျူဟာပေးပါ。
</span><span><span class="hljs-comment">## တစ်、`strnatcmp` နှင့် `ksort` စွမ်းဆောင်ရည်ဝိသေသလက္ခဏာများ</span></span><span>
</span><span><span class="hljs-number">1</span></span><span>. **`strnatcmp`**
- သဘာဝအမိန့်အတွက်ကြိုးနှိုင်းယှဉ်ဖို့အသုံးပြုခဲ့သည်,ဥပမာအားဖြင့် `</span><span><span class="hljs-string">"file2"</span></span><span>` 会排တည်နေ `</span><span><span class="hljs-string">"file10"</span></span><span>` ဉီးစွာ。
- 内部实现会逐字符解析字符串并比较数字နှင့်字母,ထို့ကြောင့်ကြီးမားသောခင်းကျင်းမှုများအတွက်ပိုမိုစားသုံးလိမ့်မည် CPU。
</span><span><span class="hljs-number">2</span></span><span>. **`ksort`**
- ခင်းကျင်း၏သော့အမည်အလိုက်စီပါ,ပုံမှန်အားဖြင့်အဘိဓာန်ကိုသုံးပါ。
- Array key အမည်များသည်အလွန်ရှုပ်ထွေးသောသို့မဟုတ်ကြီးမားသည်ဆိုပါက,အဆိုပါ sorting အချိန်သိသိသာသာတိုးမြှင့်ပါလိမ့်မယ်。
- တတိယ parameter သည်လွန်နိုင်သည် `SORT_STRING` သို့မဟုတ် `SORT_NATURAL` sorting နည်းလမ်းကိုထိန်းချုပ်ပါ。
</span><span><span class="hljs-comment">## နှစ်、ပိုကောင်းတဲ့မဟာဗျူဟာ</span></span><span>
</span><span><span class="hljs-comment">### 1. မလိုအပ်သောနှိုင်းယှဉ်မှုကိုလျှော့ချပါ</span></span><span>
当你只需要对数组进行တစ်次排序时,避免တည်နေ循环中多次调用 `strnatcmp` သို့မဟုတ် `ksort`。သငျသညျပထမ ဦး ဆုံး sort key ကိုတည်ဆောက်နိုင်ပါတယ်,再统တစ်进行排序。ဥပမာအားဖြင့်:
```php
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);
</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$keys</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">$newArray</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>];
}
</span></span>ဤနည်းလမ်းသည်မူရင်းခင်းကျင်းမှုတွင်ထပ်ခါတလဲလဲလုပ်ဆောင်မှုများကိုရှောင်ရှားပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။
Ksort သည် အမျိုးအစား parameters တွေကို sort sort ကိုထောက်ပံ့ပေးပြီး sort_natural အစား custom နှိုင်းယှဉ်လုပ်ဆောင်မှုအစားကိုတိုက်ရိုက်သုံးနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">ksort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, SORT_NATURAL);
</span></span>ဤချဉ်းကပ်မှုသည် UKSARS + strnatcmp ကို အသုံးပြုခြင်းထက်ပိုမိုထိရောက်စေသည်။
အလွန်ကြီးမားတဲ့ array တွေအတွက် Array ကိုသေးငယ်တဲ့အပိုင်းပိုင်းခွဲပြီးခွဲထုတ်နိုင်တယ်, ပြီးတော့ရလဒ်ကိုပေါင်းစည်းနိုင်ပါတယ်။ ၎င်းသည် CPU cache hit နှုန်းကိုတိုးမြှင့်နေစဉ်အမျိုးအစားတစ်ခုတည်း၏မှတ်ဉာဏ်ဖိအားကိုလျော့နည်းစေသည်။
<span><span><span class="hljs-variable">$chunks</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_chunk</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$chunks</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> &</span><span><span class="hljs-variable">$chunk</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">ksort</span></span><span>(</span><span><span class="hljs-variable">$chunk</span></span><span>, SORT_NATURAL);
}
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(...</span><span><span class="hljs-variable">$chunks</span></span><span>);
</span></span>မှတ်စု: arrays arrays သည်မှန်ကန်သောအစီအစဉ်ကိုသေချာစေရန်ကမ္ဘာအနှံ့ကိုထပ်မံခွဲခြားရန်လိုအပ်သည်။
ခင်းကျင်းမှု၏အဓိကတန်ဖိုးများကိုမပြောင်းလဲပါကနှိုင်းယှဉ်လျှင်တစ်ခုချင်းစီကိုပြန်လည်တွက်ချက်မည့်အစားသော့ချက်တန်ဖိုးမြေပုံကိုပထမ ဦး စွာသိမ်းဆည်းနိုင်သည် -
<span><span><span class="hljs-variable">$cache</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-variable">$cache</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">computeSortableString</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">cache</span></span><span>) {
</span><span><span class="hljs-title">return</span></span><span> </span><span><span class="hljs-title">strnatcmp</span></span><span>($</span><span><span class="hljs-title">cache</span></span><span>[$</span><span><span class="hljs-title">a</span></span><span>], $</span><span><span class="hljs-title">cache</span></span><span>[$</span><span><span class="hljs-title">b</span></span><span>]);
});
</span></span>အထူးသဖြင့်ကြီးမားသောကြီးမားသောအရေးယူမှုများအတွက် PHP explains ကို DS \ မြေပုံ နှင့်တူသော PHP extensions များကိုအသုံးပြုခြင်းသို့မဟုတ်ပိုမိုကောင်းမွန်သောစွမ်းဆောင်ရည်အတွက် C layer ရှိ Sorting Logic ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်ပါ။
သဘာဝ sorting အတွက်, custom strnatcmp အစား built-in sorturatural sorturatural ကိုအသုံးပြုရန်ကြိုးစားပါ။
ကြီးမားသော array များအတွက်, မိတ္တူကူးနှိုင်းယှဉ်ခြင်းနှင့်တွက်ချက်မှုကိုလျှော့ချခြင်းသော့ချက်ဖြစ်ကြသည်။
၎င်းကို chunking sorting, cached တွက်ချက်မှုရလဒ်များသို့မဟုတ်စွမ်းဆောင်ရည်မြင့်မားသောတိုးချဲ့မှုများကို အသုံးပြု. ၎င်းကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။
မလိုအပ်သောစွမ်းဆောင်ရည် overhead ကိုရှောင်ရှားရန် Memory စားသုံးမှုနှင့်ရှုပ်ထွေးမှုကိုအမြဲဂရုပြုပါ။
အထက်ပါနည်းလမ်းများမှတစ်ဆင့် PHP ရှိ StrnatcMP နှင့် Ksort ကို အသုံးပြု. PHP ရှိ Sorting ၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်အောင်လုပ်နိုင်သည်။ အထူးသဖြင့်ကြီးမားသောဒေတာများကိုလုပ်ဆောင်သောအခါ။
<hr> <? Php // အဆုံးမှာဆောင်းပါးနှင့်မသက်ဆိုင်သော placeholder code သည်ပဲ့တင်သံ "ဆောင်းပါးမျိုးဆက်ကို \ n"; > <span></span>