php - 对字母和数字字符串类型元素的数组进行 ASC 排序,但数字元素位于字母元素之后

标签 php arrays sorting numeric alphabetical

我有一个全字母或全数字的值数组,需要以升序方式对它们进行排序。此外,我希望将所有数字值移动到数组的末尾,以便它们出现在所有非数字值之后。

$test = ["def", "yz", "abc", "jkl", "123", "789", "stu"];

如果我对其运行sort(),我会得到:

Array
(
    [0] => 123
    [1] => 789
    [2] => abc
    [3] => def
    [4] => jkl
    [5] => stu
    [6] => yz
)

但我想看看:

Array
(
    [0] => abc
    [1] => def
    [2] => jkl
    [3] => stu
    [4] => yz
    [5] => 123
    [6] => 789
)

我尝试了array_reverse(),但这似乎没有改变任何东西。我不知道如何获得最后的数字,但按升序排列。

最佳答案

您需要的是排序,但具有自定义比较函数(usort)。 下面的代码将完成它:

function myComparison($a, $b){
    if(is_numeric($a) && !is_numeric($b))
        return 1;
    else if(!is_numeric($a) && is_numeric($b))
        return -1;
    else
        return ($a < $b) ? -1 : 1;
} 
$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");
usort ( $test , 'myComparison' );

关于php - 对字母和数字字符串类型元素的数组进行 ASC 排序,但数字元素位于字母元素之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590002/

相关文章:

php - Laravel:从json类型字符串访问键值

c# - 在 C# 中使用 linq 对 List<> 进行排序

list - 使用 TCL 查找字典中值的最大绝对值

javascript - Angular 过滤器 - 根据值数组过滤 JSON 结果

ios - 每次更改子项时都会调用添加的 Firebase 子项

javascript - 删除多列,然后在 Google 表格(脚本编辑器)中按价格排序

php - 需要计算某个 id、codeigniter 返回了多少条记录

php - 在 PHP 中返回 google 搜索的第一个结果的链接

php - 使用资源 Controller 的存储方法上的 Laravel 5.1 MethodNotAllowedHttpException

c# - 使用 C# 返回 JSON,如 PHP json_encode