Сортировка или сбор или массив в соответствии с индексом в laravel 5.1

У меня есть следующая коллекция в Laravel:

Collection {#357 ▼
  #items: array:11 [▼
    "29-04-2016" => array:2 [▼
      "posTotal" => "100"
      "posCount" => 1
    ]
    "05-05-2016" => array:6 [▼
      "posTotal" => "11"
      "posCount" => 1
      "keyedTotal" => "120"
      "keyedCount" => 1
      "cashTotal" => "32"
      "cashCount" => 2
    ]
    "10-05-2016" => array:10 [▼
      "posTotal" => "67"
      "posCount" => 4
      "keyedTotal" => "22"
      "keyedCount" => 1
      "cashcardTotal" => "123"
      "cashcardCount" => 1
      "refundTotal" => "-50"
      "refundCount" => 1
      "cashRefundTotal" => "-10"
      "cashRefundCount" => 1
    ]
    "17-05-2016" => array:2 [▶]
    "06-05-2016" => array:2 [▶]
    "16-05-2016" => array:2 [▶]
    "22-04-2016" => array:2 [▶]
    "25-04-2016" => array:2 [▶]
  ]
}

Теперь я хотел отсортировать по индексу, но нужно конвертировать по дате.

Например, я хотел показать

 "17-05-2016" => array:2 [▶]
 "10-05-2016" => array:10 [▶]
"06-05-2016" => array:2 [▶]

и так далее...

Я попробовал метод сортировки laravel, а также попробовал функцию ksort в php, конвертирующую коллекцию в массив. Но он воспринимает это как строку.

1 ответ

Решение

Если вы используете массив, вы можете использовать функцию uksort() с функцией обратного вызова. Вы можете написать свое собственное условие в нем.

PHP-код:

// callback function
function cmp($a, $b){
    if(strrev($a) == strrev($b)){
        return 1;
    }
    return (strrev($a) < strrev($b)) ? -1 : 1;
}

// semple array
$test = array(
    "05-06-2015" => "1",
    "07-06-2016" => "3",
    "05-08-2016" => "4",
    "05-06-2016" => "2"    
);

uksort( $test, "cmp" );

echo "<pre>";
print_r($test);

выход:

Array
(
    [05-06-2015] => 1
    [05-06-2016] => 2
    [07-06-2016] => 3
    [05-08-2016] => 4
)
Другие вопросы по тегам