通过两个值PHP对关联数组进行排序

时间:2010-12-29 13:15:59

标签: php arrays

我在数组中有一些预订数据,它们已经按[eng]排序,但我也希望按[ampm]排序,因此每组[eng]按[ampm]排序。有谁知道如何在PHP中完成这个?

    Array
(
    [xml] => Array
        (
            [booking] => Array
                (
                    [0] => Array
                    (

                        [date] => 29/12/10
                        [eng] => ALS
                        [ampm] => AM
                        [time] => 2.00
                        [type] => S
                        [seq] =>2
                        [duration] => 0

                    )

                [1] => Array
                    (

                        [date] => 29/12/10
                        [eng] => BDS
                        [ampm] => PM
                        [time] =>       2.30
                        [type] => S
                        [seq] =>       3
                        [duration] =>       0

                    )

3 个答案:

答案 0 :(得分:3)

你可以使用usort:http://www.php.net/manual/en/function.usort.php

这样当两个项目中的eng不同时,您可以相应地返回1或-1,但如果eng相同,那么您可以比较ampm返回0 ,1或-1相应。

答案 1 :(得分:2)

您可以使用usort()函数来定义回调以执行自己的排序比较逻辑:

<?php

function myBookingComparer($booking1, $booking2)
{
    // the logic
}

usort($bookingArray, "myBookingComparer");

答案 2 :(得分:2)

据推测,你正在做类似

的事情
usort($array, function ($a, $b) {
    return strcmp($a['eng'], $b['eng']);
});

你需要做这样的事情:

usort($array, function ($a, $b) {
    $eng = strcmp($a['eng'], $b['eng']);

    if ($eng == 0) {
        return strcmp ($a['ampm'], $b['ampm']);
    } else {
        return $eng;
    }
});