是否保留现有订单

时间:2015-09-22 09:02:56

标签: php

如果我有一个按日期排序的对象列表,然后使用usort()按其他属性对它们进行排序,它们是否会在适当时按日期排序?如果不是,我怎么能确定?

usort( $result, function( $a, $b ) {
    if( $a['distance'] < $b['distance'] ) {
        return -1;
    } elseif( $a['distance'] > $b['distance'] ) {
        return 1;
    } else {
        return 0;
    }
});

$result按日期排序,但不再附加表示该日期的属性。 $a['distance']是一个浮动。

最终实施:

usort( $result, function( $a, $b ) {
    if( $a['distance'] < $b['distance'] ) {
        return -1;
    } elseif( $a['distance'] > $b['distance'] ) {
        return 1;
    } else {
        if( $a['date'] < $b['date'] ) {
            return -1;
        } elseif( $a['date'] > $b['date'] ) {
            return 1;
        } else {
            return 0;
        }
    }
});

$a['date']是一个DateTime对象

1 个答案:

答案 0 :(得分:1)

不要认为保留以前的订单(保证)。但是你应该在比较功能中处理它。因此,如果日期相同(或其他方式,不确定您想要什么),只需按日期比较两个项目,然后按其他属性进行比较,这样您就可以按2个标准对数组进行排序。

usort( $result, function( $a, $b ) {
    if( $a['distance'] < $b['distance'] ) {
        return -1;
    } elseif( $a['distance'] > $b['distance'] ) {
        return 1;
    } else {
       // Here don't return 0 but do other comparation by other criteria.
    }
});