在对象数组上使用 usort

using usort on array of objects

我有以下示例数组:

  Array
(
    [0] = Array
        (
            [Campaign] = Array
                (
                    ...
                    [views] = 10
                )
        )

    [1] = Array
        (
            [Campaign] = Array
                (
                    ...
                    [views] = 0
                )
        )

    [2] = Array
        (
            [Campaign] = Array
                (
                    ...
                    [views] = 1
                )

        )

    ...

)

我希望能够通过 'views' 选项对数组进行排序,所以我写了下面的内容:

class DashboardController {
...
    public function recruitment_index(){
        ...
        usort($mostviewed, array('DashboardController','sort_objects_by_views'));


        ...
    }

    ...
    function sort_objects_by_views($a, $b) {
        if($a->Campaign->views == $b->Campaign->views){ return 0 ; }
        return ($a->Campaign->views < $b->Campaign->views) ? -1 : 1;
    }
}

但是我得到以下错误:

Notice (8): Trying to get property of non-object [APP/Controller/DashboardController.php, line 60]

第 60 行是 if($a->Campaign->views == $b->Campaign->views){ return 0 ; }

你已经说过,你的数据是一个数组。所以你应该以正确的方式访问它:

class DashboardController {
...
    public function recruitment_index(){
        ...
        usort($mostviewed, array('DashboardController','sort_objects_by_views'));


        ...
    }

    ...
    function sort_objects_by_views($a, $b) {
        if($a['Campaign']['views'] == $b['Campaign']['views']){ return 0 ; }
        return ($a['Campaign']['views'] < $b['Campaign']['views']) ? -1 : 1;
    }
}