Задан массив разных строк, используемых в функциях времени и даты 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', ... ]
Не очень эффективно и довольно некрасиво
<?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"}
Других решений пока нет …