PHP တွင် strnatcasecmp function ကို string နှစ်ခုကိုနှိုင်းယှဉ်ရန်နှင့်အမှုအားအာရုံမစိုက်နိုင်သည့်အမှုနှင့်နှိုင်းယှဉ်နိုင်သည်။ ဒါဟုခေါ်သည့် "သဘာဝ sorting" ဟုခေါ်သည်။ ဥပမာအားဖြင့်, image2.png သည် သာမန်အဘိဓာန်တွင်မဟုတ်ဘဲ image10.png မတိုင်မီအဆင့်သတ်မှတ်မည်။
ဖိုင်လမ်းကြောင်းများကိုလုပ်ဆောင်သောအခါ developer များသည်ဖိုင်အမည်များသို့မဟုတ်လမ်းကြောင်းနှစ်ခုကိုနှိုင်းယှဉ်ရန် strnatcasecmp ကို အသုံးပြုကြသည်။ သို့သော်ဖိုင်လမ်းကြောင်း၏ရှုပ်ထွေးမှုကြောင့်ဤလုပ်ဆောင်ချက်သည်အမှန်တကယ်အသုံးပြုမှုတွင်မမျှော်လင့်သောပြ problems နာအချို့ကိုအလွယ်တကူဖြစ်ပေါ်စေနိုင်သည်။ ဤဆောင်းပါးသည်ဤပြ problems နာများကိုမိတ်ဆက်ပေးပြီးသက်ဆိုင်ရာဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။
Strnatcasecmp သည်စင်ကြယ်သော string နှိုင်း ယှဉ် ချက်များအပေါ်အခြေခံသည် ။ ဤသည်ကိုဖြစ်ပေါ်လိမ့်မယ်:
<?php
$path1 = 'folder1/file2.txt';
$path2 = 'folder1/file10.txt';
if (strnatcasecmp($path1, $path2) < 0) {
echo "$path1 တည်နေ $path2 ဉီးစွာ";
} else {
echo "$path1 တည်နေ $path2 နောက်ကျသော";
}
?>
မျှော်လင့်ထားသည့်ရလဒ် - File2.txt သည် File10.txt ကို ရှေ့တွင်ရှိသင့်သည်။
အမှန်တကယ်ရလဒ် - ၎င်းသည် string ကိုနှိုင်းယှဉ်မှုတစ်ခုလုံးဖြစ်သောကြောင့်၎င်းသည် folder1 / file2.txt နှင့် folder10.txt နှင့်အထူးသဖြင့်လမ်းကြောင်းများကွဲပြားခြားနားသောသို့မဟုတ်အထူးအက္ခရာများပါ 0 င်သည်။
ဖြေရှင်းချက် -
လမ်းကြောင်းကိုအပိုင်းပိုင်းခွဲပြီး directory နှင့် file အစိတ်အပိုင်းများကိုသီးခြားနှိုင်းယှဉ်ပါ။
<?php
function comparePaths($path1, $path2) {
$parts1 = explode('/', $path1);
$parts2 = explode('/', $path2);
$len = min(count($parts1), count($parts2));
for ($i = 0; $i < $len; $i++) {
$cmp = strnatcasecmp($parts1[$i], $parts2[$i]);
if ($cmp !== 0) {
return $cmp;
}
}
return count($parts1) - count($parts2);
}
$path1 = 'folder1/file2.txt';
$path2 = 'folder1/file10.txt';
if (comparePaths($path1, $path2) < 0) {
echo "$path1 တည်နေ $path2 ဉီးစွာ";
} else {
echo "$path1 တည်နေ $path2 နောက်ကျသော";
}
?>
strnatcasecmp ပုံမှန်အမှုသည်စာလုံးအကြီးအသေးအရေးမကြီးပါ။ ၎င်းသည် Windows အောက်တွင် ok ဖြစ်သည်။
ဖြေရှင်းချက် -
အမှန်တကယ် operating arearating environment အရနှိုင်းယှဉ်နည်းလမ်းကိုညှိပါ။
<?php
function isCaseSensitiveFileSystem() {
return strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN';
}
function comparePathsAdaptive($path1, $path2) {
if (isCaseSensitiveFileSystem()) {
return strnatcmp($path1, $path2);
} else {
return strnatcasecmp($path1, $path2);
}
}
?>
ဥပမာအားဖြင့်သင် URL ကိုကိုင်တွယ်ဖြေရှင်းနေပါက -
https://gitbox.net/folder1/file2.txt
ပရိုတိုကောများ, ဒိုမိန်းအမည်များနှင့်စုံစမ်းမှုဆိုင်ရာသတ်မှတ်ချက်များအားဖြင့်အလွယ်တကူ 0 င်ရောက်စွက်ဖက်သော URL ကိုနှိုင်းယှဉ်နိုင်ရန် Strnatcasecmp ကို တိုက်ရိုက်သုံးပါ။
ဖြေရှင်းချက် -
နှိုင်းယှဉ်မှုအတွက်လမ်းကြောင်းအစိတ်အပိုင်းများကိုသာထုတ်ယူပါ။
<?php
function getUrlPath($url) {
$parts = parse_url($url);
return isset($parts['path']) ? $parts['path'] : '';
}
$url1 = 'https://gitbox.net/folder1/file2.txt';
$url2 = 'https://gitbox.net/folder1/file10.txt';
$path1 = getUrlPath($url1);
$path2 = getUrlPath($url2);
if (strnatcasecmp($path1, $path2) < 0) {
echo "$path1 တည်နေ $path2 ဉီးစွာ";
} else {
echo "$path1 တည်နေ $path2 နောက်ကျသော";
}
?>