gpt4 book ai didi

php - 修改 php natcasesort 所以 'letters only' 先来

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:23 25 4
gpt4 key购买 nike

我有一个数组

$arr=array(
"Mega XYZ no number",
"Classic no Number",
"Doppel 80x200cm",
"Classic 100x200cm",
"Mega 240x250",
"Classic 85x200cm",
"Mega 40x250",
"Profi 60x235cm",
"Mega 140x250",
);

并希望有以下顺序:

Classic no Number   
Classic 85x200cm
Classic 100x200cm
Doppel 80x200cm
Mega XYZ no number
Mega 40x250
Mega 140x250
Mega 240x250
Profi 60x235cm

php 的函数 natcasesort() 几乎可以正确完成它,除了 'Classic no Number' 和 'Mega XYZ no number' 不会成为他们“小组”中的第一名!我希望其中没有任何数字的项目显示在它们按字母顺序排列的带数字的组项目之前。

最佳答案

就是这样:

function cmp($a, $b) {
if ($a == $b) {
return 0;
}
$arr1 = str_split($a);
$arr2 = str_split($b);

$number1 = "";
$number2 = "";

for($i = 0; $i < count($arr1); $i++){
$char1 = $arr1[$i];
$char2 = $arr2[$i];
if(is_numeric($char1) && !is_numeric($char2)){
return 1;
}
if(!is_numeric($char1) && is_numeric($char2)){
return -1;
}
else if(is_numeric($char1) && is_numeric($char2)){
$number1 .= $char1;
$number2 .= $char2;
}
else {
if($char1 != $char2){
if(!empty($number1) && !empty($number2)){
$number1 = intval($number1);
$number2 = intval($number2);
return ($number1 < $number2) ? -1 : 1;
}
return ($char1 < $char2) ? -1 : 1;
}
else {
if(!empty($number1) && !empty($number2) && $number1 != $number2){
$number1 = intval($number1);
$number2 = intval($number2);
return ($number1 < $number2) ? -1 : 1;
}
}
}
}
}

usort($arr, "cmp");

关于php - 修改 php natcasesort 所以 'letters only' 先来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26931431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com