首页 > 解决方案 > 通过分组的两个字段值对数组进行排序

问题描述

更新:我通过 ID 获得数组顺序,并且与组一起,如您所见,每个 cals 都聚集在一起。我想先按 ID 排序,从大到小(反转为数组),然后在每个类中按名称排序,我将举例说明。

我有这个数组:

Array 
(
[0] => Array
    (
        [0] => 1 //ID
        [1] => 88 //Class
        [2] => 'a' //Name
    )
[1] => Array
    (
        [0] => 2 //ID
        [1] => 88 //Class
        [2] => 'b' //Name
    )
[2] => Array
    (
        [0] => 3 //ID
        [1] => 7 //Class
        [2] => 'v' //Name
    )
[3] => Array
    (
        [0] => 4 //ID
        [1] => 332 //Class
        [2] => 'd' //Name
    )
[4] => Array
    (
        [0] => 5 //ID
        [1] => 332 //Class
        [2] => 'z' //Name
    )
)

在我想要得到的过程之后:

Array 
(
[0] => Array
    (
        [0] => 4 //ID
        [1] => 332 //Class
        [2] => 'd' //Name
    )
[1] => Array
    (
        [0] => 5 //ID
        [1] => 332 //Class
        [2] => 'z' //Name
    )
[2] => Array
    (
        [0] => 3 //ID
        [1] => 7 //Class
        [2] => 'v' //Name
    )
[3] => Array
    (
        [0] => 1 //ID
        [1] => 88 //Class
        [2] => 'a' //Name
    )
[4] => Array
    (
        [0] => 2 //ID
        [1] => 88 //Class
        [2] => 'b' //Name
    )
)

我尝试将 array_multisort 与 2 个字段一起使用,但它不起作用。有人有想法吗?

感谢

标签: php

解决方案


这并不是我所说的分组,尽管我明白你为什么会这样想。实际上,这只是一种具有一组分层标准的排序,而不仅仅是一个单一的标准。您按父 ID 排序,然后使用 ID 打破平局。可以用usort.

usort($data, function($a, $b) {
    //    compare group ID
    return ($a[2] - $b[2]) ?: ($a[0] - $b[0]);
    //                        compare ID if group ID is equal
});

推荐阅读