2011-02-20 7 views
1

Есть ли способ сортировать следующий массив в нужном хронологическом порядке?Сортировка двумерного массива по дате

[0] => Array 
    (
     [date] => Sat, 12 Feb 2011 16:55:13 -0500 
     [title] => Product 1 
     [link] => http://blabla/product-1 
    ) 

[1] => Array 
    (
     [date] => Sat, 25 Sep 2010 17:52:24 -0400 
     [title] => Product 2 
     [link] => http://blabla/product-2 
    ) 

[2] => Array 
    (
     [date] => Sun, 05 Dec 2010 17:41:32 -0500 
     [title] => Product 3 
     [link] => http://blabla/product-3 
    ) 

[3] => Array 
    (
     [date] => Sun, 28 Nov 2010 09:14:39 -0500 
     [title] => Product 4 
     [link] => http://blabla/product-4 
    ) 

[4] => Array 
    (
     [date] => Tue, 07 Dec 2010 18:43:45 -0500 
     [title] => Product 5 
     [link] => http://blabla/product-5 
    ) 

Массив из rss-канала приходит ко мне следующим образом.

Я хотел бы отсортировать массив в хронологическом порядке (на основании [дата], очевидно): Продукт 1, Продукт 5, Продукт 3, Продукт 4, Продукт 2

Для того, чтобы быть в состоянии сделать отображать новейшие продукты в реальном заказе (не в странном порядке, который они мне дали!) - btw, поддельные названия продуктов, порядок действительно полностью случайный)

Спасибо большое!

ответ

2

Использование usort: http://www.phpbuilder.com/manual/function.usort.php

Вы пишете функцию сравнения, которая сравнивает два «элемента» (в данном случае, ваши даты строк), и возвращает правильный порядок для них.

Редактировать: вы можете использовать strtotime: http://php.net/manual/en/function.strtotime.php, чтобы преобразовать строку даты в метку времени, а затем вернуть сравнение полученных временных меток.

+0

Да, я использую usort, но я не могу найти правильный & правильное сравнение функция! (Я не использовал эти функции с датой) – Max

+1

@Max: вы создаете свою собственную функцию следующим образом: 'function compareByDate ($ item1, $ item2) {return strtotime ($ item1 ['date']) - strtotime ($ item2 [ 'дата']); } 'и передать имя (' compareByDate') в usort. – Jonah

+0

добавлена ​​дополнительная информация о сравнении даты – Bogatyr

2

Вы можете использовать array_multisort заказать исходный массив в соответствии с порядком отсортированного массива значений Дата:

$keyValues = array(); 
foreach ($arr as $item) { 
    $keyValues[] = strtotime($item['date']); 
} 
sort($keyValues); 
array_multisort($arr, $keyValues); 
Смежные вопросы