Сортировка массива месяцев с помощью коллекции laravel

Мой массив

$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 был последним ключом

b00sted 'snail' 10.09.2018 11:09

Можете привести еще примеры результата, что будет, когда их будет 20? Должен ли он пойти наверх?

Robert 10.09.2018 11:17

Осталось всего 12 месяцев;) @nrkz Итак, если сейчас май (5), массив должен иметь вид [6,7,8,9,10,11,12,1,2,3,4,5]?

brombeer 10.09.2018 11:31

Кербхольц точно;)

b00sted 'snail' 10.09.2018 11:32
2
4
635
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сделать это можно так:

$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;});

b00sted 'snail' 10.09.2018 11:39

Пожалуйста. Я бы определенно использовал ->month, как вы предложили. Я просто использовал ->format('n'), насколько я его помню, и не стал искать документацию по Carbon. Я обновил свой ответ.

Jonathon 10.09.2018 11:41

Вы можете работать с php, который

krsort();

krsort может сортировать ассоциативные массивы в порядке убывания по ключу. Так

ksort($array);

Другие вопросы по теме