Сортировать строковые единицы даты +/- PHP

Задан массив разных строк, используемых в функциях времени и даты PHP

[ '+7 day', '+2 week', '+5 month', '+1 week', '+10 day', '+2 year', '+1 day', ... ]

Как бы вы отсортировали их в:

[ '+1 day', '+7 day', '+1 week', '+10 day', '+2 week', '+5 month', '+2 year', ... ]

-1

Решение

Не очень эффективно и довольно некрасиво

<?php
define('DATEINTERVAL_FORMAT', '%R%Y%M%D%H%I%S');
$intervals = [ '+7 day', '+2 week', '+5 month', '+1 week', '+10 day', '+2 year', '+1 day', /*...*/ ];

usort(
$intervals,
function ($a, $b) {
$da = DateInterval::createFromDateString($a);
$db = DateInterval::createFromDateString($b);

return strcmp($da->format(DATEINTERVAL_FORMAT), $db->format(DATEINTERVAL_FORMAT));
}
);

var_dump($intervals);

Результат:

array(7) {
[0]=>
string(6) "+1 day"[1]=>
string(6) "+7 day"[2]=>
string(7) "+1 week"[3]=>
string(7) "+10 day"[4]=>
string(7) "+2 week"[5]=>
string(8) "+5 month"[6]=>
string(7) "+2 year"}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]