လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> file name ကို strnatcasecmp မှတဆင့်ရှေ့ဆက်နှင့်ဘယ်လို sort လုပ်နည်း။

file name ကို strnatcasecmp မှတဆင့်ရှေ့ဆက်နှင့်ဘယ်လို sort လုပ်နည်း။

gitbox 2025-05-27

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 ဆိုတာဘာလဲ။

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 နှင့်အတူ

သင်၏ဖိုင်အမည်မှာအပြည့်အဝ 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 ကို သုံးရန်လိုအပ်သည်။

ဖိုင်အမည်ဖြင့်သာ (URL ရှေ့ဆက်များကိုလျစ်လျူရှုခြင်း)

အကယ်. သင်သည် 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 သည်ဖိုင်အမည်ပေါ်တွင်အခြေခံသည်။