自然地对字母数字字符串数组进行排序

问题描述 投票:0回答:3

我遇到了一个排序问题,我有一个包含 10 个数字 (1-10) 的数组,我需要按以下方式对其进行排序,例如,10 将出现在 1 之后...

想要的结果

$arr['a1','a10','a2','a3','a4','a5','a6','a7','a8','a9'];

实际结果

$arr['a1','a2','a3','a4','a5','a6','a7','a8','a9','a10'];

sort($arr);

$arr['a10','a1','a2','a3','a4','a5','a6','a7','a8','a9'];

我不知道这种排序的名称或如何执行它,如果有人可以帮助我,我将不胜感激。

注意:数字是字符串的一部分

php arrays sorting natural-sort
3个回答
6
投票

尝试

sort($arr,SORT_STRING)
显式地将输入视为字符串。

编辑:现在您已经给出了实际的字符串,请尝试以下操作:

usort($arr,function($a,$b) {
    $a = explode("=",$a);
    $b = explode("=",$b);
    return $a[0] == $b[0] ? strcmp($a[1],$b[1]) : strcmp($a[0],$b[0]);
});

0
投票

当然,您想按字母顺序排序,而不是按数字排序。

sort($arr, SORT_STRING);

参考:http://php.net/manual/en/function.sort.php


0
投票

您可以使用第二个参数更改排序的行为。

试试这个:

sort($arr, SORT_STRING);
© www.soinside.com 2019 - 2024. All rights reserved.