以字母顺序排序php数组

sam*_*ach 7 php sorting

我知道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';
Run Code Online (Sandbox Code Playgroud)

现在如果我应用natsort(),'10 ..'和'13 ..'被放在'1a ..'之上.如何让我的PHP代码认为'10 ..'大于'1a ...'和'1a ...'应该在顶部?在我的特定情况下,正确的输出是:

'1a. xyz';
'1b. xyz';
'2. xyz';
'4a. xyz';
'4b. xyz';
'6. xyz';
'10. xyz';
'13. xyz';
Run Code Online (Sandbox Code Playgroud)

我使用了一个自定义算法,但它也是一样的......它在'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;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*tau 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);
Run Code Online (Sandbox Code Playgroud)