File Management, Resource Loading သို့မဟုတ် Version Control Control တွင် မူတည်. ရှေ့ဆက်ဖိုင်အမည်များကို sorting ၏ပြ problem နာကိုကျွန်ုပ်တို့မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ဥပမာအားဖြင့်ဖိုင်စာရင်းသည်ဤကဲ့သို့သောပုံစံမျိုးရှိနိုင်သည်။
file1.txt, file10.txt, file2.txt, file20.txt
အကယ်. သင်သည်ပုံမှန် string နှိုင်းယှဉ်ချက်များ ( strcmp သို့မဟုတ် accmp ပုံမှန်စည်းမျဉ်းစည်းကမ်းများကိုစည်းမျဉ်းစည်းကမ်းများ) နှင့်တိုက်ရိုက်စီလိုက်လျှင်ရလဒ်မှာ -
file1.txt, file10.txt, file2.txt, file20.txt
၎င်းသည် "သဘာဝအစီအစဉ်" ကိုကျွန်ုပ်တို့မျှော်လင့်ထားသည့် "သဘာဝအစီအစဉ်" ကို အလိုအလျောက်အလိုရှိသည်။
ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည်အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုကိုထောက်ပံ့ပေးသည်။ Strnatcasecmp ။ ၎င်းကိုအမှုန်မခံစားနိုင်သောသဘာဝအမိန့်နှိုင်းကျောများပြုလုပ်ရန်အသုံးပြုနိုင်သည်။
strnatcasecmp သည် PHP တွင် built-in string နှင့်နှိုင်းယှဉ်ပါက,
"သဘာဝအမိန့်" ဟုခေါ်သောအဓိပ္ပာယ်ကိုဆိုလိုသည်မှာနံပါတ်အပိုင်းများကိုအက္ခရာများထက်ဂဏန်းတန်ဖိုးများနှင့်နှိုင်းယှဉ်ထားသည်။ ဥပမာအားဖြင့် 10> 2 နောက်ကွယ်တွင် 10 ခု သည် 2 နာရီမှ 2 ရက်,
ကျွန်ုပ်တို့တွင်အောက်ပါဖိုင်များစာရင်းတွင်ရှိသည်ဆိုပါစို့။
$files = [
'file10.txt',
'file2.txt',
'file1.txt',
'file20.txt',
'file11.txt'
];
ကျနော်တို့ကသူတို့ကိုသဘာဝအမိန့်အတွက် sort ချင်တယ်, ဒါကိုလုပ်နိုင်ပါတယ်:
usort($files, function($a, $b) {
return strnatcasecmp($a, $b);
});
print_r($files);
ရလဒ်များအစက်အပြောက်:
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
[3] => file11.txt
[4] => file20.txt
)
သင်မြင်နိုင်သည့်အတိုင်း File10.txt သည်ပုံမှန် string နှိုင်းယှဉ်မှုများကဲ့သို့အမိန့်မဟုတ်ဘဲ file2.txt နောက်တွင်ရှိသည်။
သင်၏ဖိုင်အမည်မှာအပြည့်အဝ URL ဖြစ်ပါက -
$files = [
'https://gitbox.net/file10.txt',
'https://gitbox.net/file2.txt',
'https://gitbox.net/file1.txt',
'https://gitbox.net/file20.txt',
'https://gitbox.net/file11.txt'
];
သင်တူညီသော abortort sorting နည်းလမ်းကိုတိုက်ရိုက်အသုံးပြုနိုင်သည်။
usort($files, function($a, $b) {
return strnatcasecmp($a, $b);
});
print_r($files);
မှတ်စု : strnatcasecmp သည် Protocol နှင့်ဒိုမိန်းအမည်များအပါအ 0 င်အလုံးစုံကြိုးများကိုနှိုင်းယှဉ်ပါမည်။ ဖိုင်အမည်အပိုင်းကိုသာခွဲထုတ်လိုပါက File Name ကိုအရင်ထုတ်ယူရန် Parse_url နှင့် Basename ကို သုံးရန်လိုအပ်သည်။
အကယ်. သင်သည် filename အပိုင်းအားဖြင့် sort လိုပါက ( https://gitbox.net/ ကို လျစ်လျူရှုပါ) သင်ဤသို့ပြုလုပ်နိုင်သည်။
usort($files, function($a, $b) {
$nameA = basename(parse_url($a, PHP_URL_PATH));
$nameB = basename(parse_url($b, PHP_URL_PATH));
return strnatcasecmp($nameA, $nameB);
});
print_r($files);
၎င်းသည် URL ၏ရှေ့ဆက်အပိုင်းသည်ကွဲပြားခြားနားလျှင်ပင် sorting သည်ဖိုင်အမည်ပေါ်တွင်အခြေခံသည်။