用php(laravel)对对象排序

时间:2015-07-29 13:16:32

标签: php laravel laravel-5 eloquent

我有一个对象,其中包含照片文件路径,标题及其中的顺序等。

我需要按照“订单”的顺序对单张照片进行排序。因此,当我遍历每张照片时,它们会按照订单值指定的顺序显示。

以下是一个示例对象:

    object: Illuminate\Database\Eloquent\Collection Object
(
    [items:protected] => Array
        (
            [0] => Photo Object
                (
                    [timestamps] => 
                    [guarded:protected] => Array
                        (
                            [0] => id
                        )

                    [connection:protected] => 
                    [table:protected] => 
                    [primaryKey:protected] => id
                    [perPage:protected] => 15
                    [incrementing] => 1
                    [attributes:protected] => Array
                        (
                            [id] => 11
                            [res_id] => 1
                            [order] => 6
                            [owner_type] => Hotel
                            [owner_id] => 1
                            [gallery] => 
                            [caption] => 
                            [file] => Hotel_1_11.jpg
                            [deleted_at] => 
                        )

3 个答案:

答案 0 :(得分:5)

在数据库中对数据进行排序总是更好,例如:

$photos = Photo::orderBy('order')->get();

这应该会给你更好的表现。

但是,如果无法进行上述操作,您可以在收藏中调用以下内容:

$collection = $collection->sortBy('order');

这将按照您所拥有的任何模型的顺序字段按升序对其进行排序。

如果您想按降序对它们进行排序,请执行以下操作:

$collection = $collection->sortBy('order', SORT_REGULAR, true);

答案 1 :(得分:1)

从Laravel 5.1开始,您可以使用相当短的语法以降序顺序排序:

$collection = $collection->sortByDesc('order');

而不是:

$collection = $collection->sortBy('order', SORT_REGULAR, true);

答案 2 :(得分:0)

如果您有一个集合,并且希望根据其任何键对其进行排序,则可以使用以下代码。

//if you want to sort in ascending order
$unique     = $collection->unique()->sortBy('YOUR_KEY_TO_SORT');

//if you want to sort in descending order
$unique     = $collection->unique()->sortBy('YOUR_KEY_TO_SORT',  SORT_REGULAR,  true);