Как вывести список значений массива по порядку, используя функцию сортировки в PHP - PullRequest
0 голосов
/ 31 января 2019

У меня есть массив.Примеры строковых значений внутри массива:

10-01-2019
28-12-2018
16-01-2019
21-01-2019
14-11-2018

Мне нужно перечислить их в порядке дат.Я не смог отсортировать их по названию, потому что 28-12-2018 будет выглядеть больше, чем 10-01-2019, например (28 больше 10), хотя на самом деле это не так, поскольку первое значениеза декабрь предыдущего года.

Поэтому я сделал настройки для отображения значений в виде ГГГГММДД

20190110
20181228
20190116
20190121
20181114

Однако я не могу получить значения для правильного порядка при их циклическом просмотре

//this is my array
$row['file_name'];

//remove hyphens from file name and display only 8 characters
$date = substr(str_replace("-", "", $row['sitma_file_name']), 0, 8);

//get the year part of $date
$year = substr($date,4);

//get the month part of $date
$month = substr($date,2, 2);

//get the day part of $date
$day = substr($date, 0, 2);

//concatenate above variables to make $date display as YYYYMMDD
$date = $year . $month . $day;

//put $date in an array
$date_array = array($date);

//sort the array
sort($date_array);

//loop through array and echo values 
foreach ($date_array as $value){
    echo $value;
}

Ожидаемые результаты

20181114
20181228
20190110
20190116
20190121

Однако фактические результаты

20190110
20181114
20190116
20190121
20181228

1 Ответ

0 голосов
/ 31 января 2019

Вот решение:

$dates = [
    '10-01-2019',
'28-12-2018',
'16-01-2019',
'21-01-2019',
'14-11-2018'
    ];

usort($dates, function($a, $b){
    $dt1 = explode('-',$a);
    $dt2 = explode('-', $b);

    return ($dt2[2].$dt2[1].$dt2[0]) < ($dt1[2].$dt1[1].$dt1[0]);
});

echo '<pre>';
print_r($dates);

Вывод:

Array
(
    [0] => 14-11-2018
    [1] => 28-12-2018
    [2] => 10-01-2019
    [3] => 16-01-2019
    [4] => 21-01-2019
)
...