使用不同的键按日期对对象排序

时间:2014-09-08 13:06:52

标签: php object multidimensional-array array-multisort

我有4个不同的对象,但每个对象的日期都有不同的属性。

$obj_one->date_added
$obj_two->date_used
$obj_three->transaction_date
$obj_four->credit_date

我尝试做的是使用array_merge,然后使用array_multisort对其进行排序。

现在,如果有两个对象,这是有效的,但是当有4个对象时,我无法找到方法。

这是我用过的两个对象:

$data = array_merge($obj_one, $obj_two);

foreach($data as $key => $row) {
    $obj_one_sort[$key] = $row->date_added;
    $obj_two_sort[$key] = $row->date_used;
}

array_multisort($obj_one_sort, SORT_ASC, $obj_two_sort, SORT_ASC, $sorted_objects);

有什么想法吗?

编辑:

这就是我最终做到的方式。

$actions = array_merge($object1, $object2, $object3, $object4);

function cmp($a, $b)
    {
        switch(get_class($a)) {
            case 'Object1':
                $date_a = $a->date_added;
                break;
            case 'Object2':
                $date_a = $a->credit_date;
                break;
            case 'Object3':
                $date_a = $a->transaction_date;
                break;
            case 'Object4':
                $date_a = $a->date_used;
                break;
        }

        switch(get_class($b)) {
            case 'Object1':
                $date_b = $b->date_added;
                break;
            case 'Object2':
                $date_b = $b->credit_date;
                break;
            case 'Object3':
                $date_b = $b->transaction_date;
                break;
            case 'Object4':
                $date_b = $b->date_used;
                break;
        }

        if ($date_a == $date_b) {
            return 0;
        }
        return ($date_a < $date_b) ? -1 : 1;
    }

    usort($actions, "cmp");

0 个答案:

没有答案