This question already has answers here:
How to Sort Multi-dimensional Array by Value?

(13个回答)


7年前关闭。




我的数组:
$MY_ARRAY =
Array
(
    [0] => Array
        (
            [0] => 2861
            [1] => Array
                (
                    [start_month] => 6
                    [start_year] => 1970
                    [end_month] => 12
                    [end_year] => 1990
                    [experience_info] => "Practically a random string"
                )

        )

)

我想按其内部内容对$MY_ARRAY直接子级进行排序,
理想情况下,顺序为 start_year,start_month,end_year,end_month 。我想我可以以某种方式使用array_multisort(),但我不知道如何。有人知道如何处理吗?

谢谢。

编辑:如它所示,该解决方案非常简单,我不知道的是,在比较callback-compare-function的过程中,您可以使用更深的结构-因此,如果比lvl-1索引更深的索引始终同样的方法(我的情况):)

最佳答案

为此,您可以使用uasort函数:

function compare_callback($arr1, $arr2) {
    $start_year1 = $arr1[1]['start_year'];
    $start_year2 = $arr2[1]['start_year'];

    $start_month1 = $arr1[1]['start_month'];
    $start_month2 = $arr2[1]['start_month'];

    $end_year1 = $arr1[1]['end_year'];
    $end_year2 = $arr2[1]['end_year'];

    $end_month1 = $arr1[1]['end_month'];
    $end_month2 = $arr2[1]['end_month'];

    return ($start_year1 === $start_year2)
        ? (($start_month1 === $start_month2)
            ? (($end_year1 === $end_year2)
                ? (($end_month1 === $end_month2)
                    ? 0
                    : (($end_month1 < $end_month2) ? -1 : 1))
                : (($end_year1 < $end_year2) ? -1 : 1))
            : ($start_month1 < $start_month2) ? -1 : 1)
        : (($start_year1 < $start_year2) ? -1 : 1);
}

uasort($array, 'compare_callback');

关于PHP:按给定的字段顺序按比1级维值更深的值对多数组进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21820514/

10-09 01:23