如何按对象中的项排序

时间:2014-08-14 11:21:00

标签: php

我有以下数据我已经构建(例如简化)并且在PHP中[start_date]排序数据时遇到问题 - 非常感谢任何帮助,谢谢你我拉我的头发用usort等!!

[1338] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 193
                    [data] => 1338
                    [num] => 2
                )

            [start_date] => 2014-09-13
        )

[618] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 193
                    [data] => 1338
                    [num] => 2
                )

            [1] => stdClass Object
                (
                    [id] => 193
                    [data] => 1338
                    [num] => 2
                )

            [start_date] => 2014-06-20
        )

[349] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 887
                    [data] => 223
                    [num] => 2
                )

            [1] => stdClass Object
                (
                    [id] => 887
                    [data] => 224
                    [num] => 2
                )

            [start_date] => 2014-08-20
        )

3 个答案:

答案 0 :(得分:2)

usort是要走的路:

usort($array, function($a,$b){
    return strtotime($a["start_date"]) - strtotime($b["start_date"]);
});

答案 1 :(得分:0)

试试这个

function cmp($a, $b){

    $a = strtotime($a['start_date']);
    $b = strtotime($b['start_date']);

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

usort($array, "cmp");

答案 2 :(得分:0)

Shakti Patel的答案基本上有效(谢谢先生!) - 但我需要保留原始索引(我应该在原来的问题中让这个更清晰) - 所以这里是我使用uasort的例子()维护索引:

function cmp($a, $b){

$a = strtotime($a['start_date']);
$b = strtotime($b['start_date']);

if ($a == $b) {
    return 0;
}
    return ($a < $b) ? -1 : 1;
}

uasort($array, "cmp");