按属性日期排序对象数组

时间:2015-07-30 16:36:14

标签: php object

我找到了这个thread,其中数组中的对象按其属性名称“排序”。我希望以某种日期格式做同样的事情。即。

Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [date] => '6/7/10'
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [date] => '3/10/15'
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [date] => '7/1/11'
        )

变为

Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [date] => '6/7/10'
        )

    [1] => stdClass Object
        (
            [ID] => 3
            [date] => '7/1/11'
        )

    [2] => stdClass Object
        (
            [ID] => 2
            [date] => '3/10/15'
        )

但是,我无法理解其中任何一个答案是否正常工作

usort($your_data, function($a, $b)
{
    // code to
    // sort by newest

    return $result;
});

是否返回了整个数组?这是增量排序吗?或者我完全误解了OP的问题?

1 个答案:

答案 0 :(得分:1)

因为你的$your_data是通过引用传递的,所以usort实际上对原始数组进行排序,而不是返回它的排序副本。第二个参数中的回调仅用于比较元素。从PHP文档:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

因此,如果您想按日期对对象进行排序,可以使用:

usort($your_data, function($a, $b)
{
    $date1 = strtotime($a->date);
    $date2 = strtotime($b->date);
    if ($date1 < $date2) return -1;
    if ($date1 == $date2) return 0;
    if ($date1 > $date2) return 1;
});