【问题标题】:Sort array of months with laravel collection使用 laravel 集合对月份数组进行排序
【发布时间】:2019-02-14 16:24:20
【问题描述】:

我的数组是

$array = [
 1 => 0
 2 => 0
 3 => 0
 4 => 0
 5 => 0
 6 => 0
 7 => 2
 8 => 0
 9 => 0
 10 => 1
 11 => 0
 12 => 1
];

因此我希望它成为

$array = [
 10 => 1
 11 => 0
 12 => 1
 1 => 0
 2 => 0
 3 => 0
 4 => 0
 5 => 0
 6 => 0
 7 => 2
 8 => 0
 9 => 0
];

我现在的逻辑是

$sorted = collect($array)
  ->sortBy(function ($count, $month) {
    return $month <= 9;
  });

但结果不是我所期望的:(

基本上我希望最后一个索引是当前月份等等。

请帮帮我!

【问题讨论】:

  • 正如我所写,我希望第 9 个月成为最后一个键
  • 你能放更多的结果例子吗,如果有 20 个会发生什么?它应该上榜吗?
  • 只有 12 个月 ;) @nrkz 所以,如果是 May(5),数组应该看起来像 [6,7,8,9,10,11,12,1,2, 3,4,5]?
  • 完全是kerbholz ;)

标签: php laravel sorting collections closures


【解决方案1】:

你可以这样做:

$sorted = collect($array)->sortBy(function ($count, $month) {
    $currentMonth = (int) \Carbon\Carbon::now()->month;

    return ($month + (12 - $currentMonth - 1)) % 12;
});

【讨论】:

  • 完美 ;) 谢谢! ->sortBy(function ($count, $month) { return ($month + (12 - Carbon::now()->month - 1)) % 12; });
  • 不客气。我肯定会按照你的建议使用-&gt;month。我只是使用了-&gt;format('n'),因为我记得它并且没有费心查找 Carbon 的文档。我已经更新了我的答案。
【解决方案2】:

你可以通过php实现

krsort();

krsort 可以根据键对关联数组进行降序排序。所以

ksort($array);

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多