按字母数字顺序对PHP数组进行排序

7
我知道php中有natsort()和natcasesort()函数可以按自然顺序排序数组元素。我正在尝试对以下项目进行排序。
 array[0]= '10. xyz';
   array[1]=  '13. xyz';
   array[2]=  '2. xyz';
   array[3]=  '1a. xyz';
   array[4]=  '6. xyz';
   array[5]=  '1b. xyz';
   array[6]=  '4a. xyz';
   array[7]=  '4b. xyz';

现在,如果我应用natsort()函数,'10..'和'13..'会排在'1a..'的前面。那么如何让我的php代码认为'10..'比'1a...'更大,并且让'1a...'排在最前面呢?在我特定的情况下,正确的输出应该是:

'1a. xyz';
'1b. xyz';
'2. xyz';
'4a. xyz';
'4b. xyz';
'6. xyz';
'10. xyz';
'13. xyz';

我使用了自定义算法,但它的作用是相同的...它会在'1a...'之前放置'10..'。这是我的自定义函数:

function cmp($a, $b) {
    $a_ex=explode(".",$a);
    $b_ex=explode(".",$b);
    if ($a_ex[0] == $b_ex[0] ) {
        return 0;
    }
    return ($a_ex[0] < $b_ex[0]) ? -1 : 1;
}

正如其他人所贴的,natsort() 对我有效。您使用的是哪个版本的PHP? - Hammerite
3个回答

5
使用natsort()函数:
$array[0]= '10. xyz';
$array[1]=  '13. xyz';
$array[2]=  '2. xyz';
$array[3]=  '1a. xyz';
$array[4]=  '6. xyz';
$array[5]=  '1b. xyz';
$array[6]=  '4a. xyz';
$array[7]=  '4b. xyz';

natsort($array);

print_r($array);

1

natsort 对我来说很好用...

否则在对数组进行排序之前使用 str_pad 格式化数字。

或者你可以使用 usort 与自定义函数,也许使用 intval...


0

使用usort与您自己的定制算法


natsort()介绍了它的算法。 - Alex Pliutau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接