【问题标题】:Array sorting ,not a simple sort数组排序,不是简单的排序
【发布时间】:2017-06-07 19:16:53
【问题描述】:

我有一个很长的数组,用于分页! 我为用户做了一个“溢价”。现在我想按溢价对数组进行排序。 我的数组:

array:8 [▼
  0 => array:34 [▼
    "id" => 10
    "id_user" => "2"
    "vehicletype" => "car"
    "make" => "AMC"
    "model" => "Encore"
    "age" => "2017-01-14"
    "body" => "4"
    "price" => "94650"
    "vrt_price" => "102850"
    "vrt_date" => "2017-01-14"
    "condition" => "2"
    "mileage" => "12"
    "booth_space" => "1"
    "doors" => "1"
    "seat" => "14"
    "eng_size" => "1"
    "eng_hp" => "0.75"
    "eng_kw" => "1"
    "fuel" => "LPG"
    "trans" => "Semi-Au"
    "desc" => "133333333333333333333333333333333333333333333333333333333133333333333333333333333333333333333333333333333333333333"
    "extras" => "2"
    "created_at" => "2017-01-14 14:13:00"
    "finish_at" => "2017-02-14 14:13:00"
    "updated_at" => null
    "premium_g1" => null
    "g1_start_at" => null
    "g1_finish_at" => null
    "premium_g2" => null
    "g2_start_at" => null
    "g2_finish_at" => null
    "extras_title" => array:1 [▶]
    "user_name" => "Szabolcs996"
    "images" => array:1 [▶]
  ]
  1 => array:34 [▶]
  2 => array:34 [▶]
  3 => array:34 [▶]
  4 => array:34 [▶]
  5 => array:34 [▶]
  6 => array:34 [▼
    "id" => 5
    "id_user" => "2"
    "vehicletype" => "car"
    "make" => "Aston Martin"
    "model" => "Rapide"
    "age" => "2017-01-14"
    "body" => "5"
    "price" => "4800"
    "vrt_price" => "1550"
    "vrt_date" => "2017-01-14"
    "condition" => "2"
    "mileage" => "450"
    "booth_space" => "1550"
    "doors" => "15"
    "seat" => "4"
    "eng_size" => "5"
    "eng_hp" => "79.5"
    "eng_kw" => "106"
    "fuel" => "LPG"
    "trans" => "Automatic"
    "desc" => "1234567891111111111111111111111111111111111111111111111111111115asssssssssssssssssssssss"
    "extras" => "2,4,7,8"
    "created_at" => "2017-01-14 12:43:19"
    "finish_at" => "2017-02-14 12:43:19"
    "updated_at" => "2017-01-22 17:04:08"
    "premium_g1" => "123"
    "g1_start_at" => "2017-01-23 09:45:58"
    "g1_finish_at" => "2017-02-04 09:45:58"
    "premium_g2" => "22"
    "g2_start_at" => "2017-01-23 09:45:58"
    "g2_finish_at" => "2017-02-22 09:45:58"
    "extras_title" => array:4 [▶]
    "user_name" => "Szabolcs996"
    "images" => array:12 [▶]
  ]
  7 => array:34 [▶]
]

所以,文章有premium_g2 的价值! 重要的是我不想按 MYSQL 排序!

我每页都有 8 篇文章。 我想混合文章,比如在每一页上每隔第二/第三篇文章作为溢价。

谢谢!

【问题讨论】:

    标签: php mysql arrays laravel sorting


    【解决方案1】:

    你可以使用 laravel 集合。

    collect($array)->sortBy('premium_g2');
    

    您还可以反转结果。

    collect($array)->sortByDesc('premium_g2');
    
    collect($array)->sort('premium_g2')->reverse();
    

    https://laravel.com/docs/5.3/collections#method-sortby

    要混合文章,我认为最好的解决方案可能是首先将数据分为两个集合。

    $collection = collect($array);
    $total = $collection->count();
    $sorted = $collection->groupBy(function ($item, $key) {
        return $item['premium_g2'] === null ? 'standard' : 'premium';
    }
    

    这将为您提供一个包含两个键的集合,您可以像这样访问它们:

    $sorted->premium
    $sorted->standard
    

    然后您可以使用$total 计数循环并选择要显示的文章。您可以使用shift() 方法从每个集合中提取第一项,以便在下一个循环中选择下一项。

    @for ($i = 0; $i < $total; $i++)
        @if ($i % 3 === 0)
            {{ $sorted->premium->shift()['make'] }}
        @else
            {{ $sorted->standard->shift()['make'] }}
        @endif
    @endfor
    

    【讨论】:

    • 谢谢。这很有帮助。我忘了检查 Laravel 文档。但是要混合吗? :)
    • 我已经添加了一个解决方案,很抱歉花了这么长时间,但我正在尝试找到一个很好的方法,我正在工作。如果有任何问题,请告诉我,我没有测试过,但我认为这应该可以。
    • 只有一个问题。我怎样才能保持不变 ->shift()['make'] ['model']['etc'] 。因为如果我总是使用 shift ,它会移动到下一个。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2015-11-05
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多