Как отсортировать конкретные строки из массива значений в PHP? - PullRequest
3 голосов
/ 02 декабря 2011
$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19");

Я хочу отсортировать строки этого массива следующим образом: сначала следует отсортировать год, затем - месяц,

Желаемый результат

Array ( [0] => 2010-Marh_19 
        [1] => 2010-November_9 
        [2] => 2011-June_4 
        [3] => 2011-September_38
        [4] => 2011-November_29 )

Я что-то пробовал, может кто-нибудь связать мою функцию для сортировки по году, затем по месяцу http://codepad.org/skEiUkTC

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Попробуйте этот код:

<?php
$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19");
function monthCompare($a, $b) {
   $da = strtotime(strstr($a, '_', true));
   $db = strtotime(strstr($b, '_', true));
   return $da > $db;
}
usort($array, "monthCompare");
print_r($array);
?>

OUTPUT

Array
(
    [0] => 2010-November_9
    [1] => 2010-December_19
    [2] => 2011-June_4
    [3] => 2011-September_38
    [4] => 2011-November_29
)
1 голос
/ 02 декабря 2011

Итак, простое решение для этого - превратить каждое из значений в объекты с DateTime :: createFromFormat , отсортировать их и затем снова вывести значения.

Перед тем, как яЯ видел этот вопрос, в котором я никогда не играл с объектами DateTime, но они удивительны и с ними легко работать, и createFromFormat имеет смысл.

$array = array("2011-September_30","2011-June_4","2010-November_9","2011-November_29","2010-December_19");

foreach($array as $item)
{
    $timestamps[] = DateTime::createFromFormat('Y-F_d',$item);
}

sort($timestamps);

foreach($timestamps as $timestamp)
{
    $newarray[] = $timestamp->format('Y-F_d');
}

даст вам

Array
(
    [0] => 2010-November_09
    [1] => 2010-December_19
    [2] => 2011-June_04
    [3] => 2011-September_30
    [4] => 2011-November_29
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...