[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сортировка двумерного массива
kent666
Всем привет.
У меня есть массив
$arr =

Array
(
[0] => Array
(
[id] => 9
[name] => Самая важная новость для данного сайта (обновлено)
[type] => unit
[description] =>
[date] => 16 января 2012
)

[1] => Array
(
[id] => 10
[name] => Супер новая новость для данного сайта, На вного важнее всех предыдущих)))
[type] => unit
[description] =>
[date] => 16 января 2012
)

[2] => Array
(
[id] => 6
[name] => Очень важная новость для данного сайта
[type] => unit
[description] =>
[date] => 23 января 2012
)

[3] => Array
(
[id] => 27
[name] => новость5
[type] => unit
[description] =>
[date] => 23 января 2012
)

)

мне нужно его отсортировать в порядке убывания даты! Как это возможно сделать?



Спустя 9 минут, 22 секунды (24.01.2012 - 11:58) redreem написал(а):
есть куча методов сортировки. то что он двумерный - ну и что? ты же сортируешь только по первым индексам. бери простейшую пузырьковую и все. дату просто надо преобразовывать в метку, чтобы сравнивать можно было корректно.

Спустя 11 минут, 57 секунд (24.01.2012 - 12:10) Winston написал(а):
uasort() ?

Спустя 5 минут, 9 секунд (24.01.2012 - 12:15) Rigel написал(а):

Спустя 2 минуты, 37 секунд (24.01.2012 - 12:17) kent666 написал(а):
Использую arsort и все равно выводит в таком порядке
$arr =

Array
(
[2012-01-23 14:37:52] => Array
(
[id] => 27
[name] => новость5
[type] => unit
[description] =>
[date] => 23 января 2012
)

[2012-01-16 15:13:58] => Array
(
[id] => 10
[name] => Супер новая новость для данного сайта, На вного важнее всех предыдущих)))
[type] => unit
[description] =>
[date] => 16 января 2012
)

[2012-01-16 15:04:35] => Array
(
[id] => 9
[name] => Самая важная новость для данного сайта (обновлено)
[type] => unit
[description] =>
[date] => 16 января 2012
)

[2012-01-23 14:40:06] => Array
(
[id] => 6
[name] => Очень важная новость для данного сайта
[type] => unit
[description] =>
[date] => 23 января 2012
)

)


Спустя 1 минута, 50 секунд (24.01.2012 - 12:19) Winston написал(а):
kent666
Попробуй дату переводить в unix-time с помощью strtotime() и уже по ней сортировать.

Спустя 1 минута, 58 секунд (24.01.2012 - 12:21) neadekvat написал(а):
Цитата (redreem @ 24.01.2012 - 12:58)
бери простейшую пузырьковую

Я думаю, тут есть смысл разобраться, например, в qsort'е ("quick sort" - "быстрая сортировка"). Надо же когда-нибудь взрослеть, да? Правда, к стандартному алгоритму, видимо, придется написать еще функцию сравнения дат типа "ДД месяц ГГГГ".

Спустя 9 минут, 44 секунды (24.01.2012 - 12:31) kent666 написал(а):
Winston все равно что то не получеться
использую
 arsort($arr, SORT_NUMERIC);


$arr =

Array
(
[1327318672] => Array
(
[id] => 27
[name] => новость5
[type] => unit
[description] =>
[date] => 23 января 2012
)

[1327318806] => Array
(
[id] => 6
[name] => Очень важная новость для данного сайта
[type] => unit
[description] =>
[date] => 23 января 2012
)

[1326716038] => Array
(
[id] => 10
[name] => Супер новая новость для данного сайта, На вного важнее всех предыдущих)))
[type] => unit
[description] =>
[date] => 16 января 2012
)

[1326715475] => Array
(
[id] => 9
[name] => Самая важная новость для данного сайта (обновлено)
[type] => unit
[description] =>
[date] => 16 января 2012
)

)


Спустя 4 минуты, 57 секунд (24.01.2012 - 12:36) kent666 написал(а):
1327318672 идет перед 1327318806 а должно быть наооброт

Спустя 57 секунд (24.01.2012 - 12:37) Winston написал(а):
Хм... Но если посмотреть на элемент [date] то видно, что он уже отсортирован...

Спустя 38 секунд (24.01.2012 - 12:37) Winston написал(а):
У тебя есть этот массив прописан в PHP, а не распечатанный.
Или ты из базы выводишь?

Спустя 5 минут, 3 секунды (24.01.2012 - 12:43) kent666 написал(а):
Winston
Вывожу из базы
                $res = $db->mysqlQuery("SELECT `description`, 
DATE_FORMAT(`date`,'%d') AS `day`,
DATE_FORMAT(`date`,'%m') AS `month`,
DATE_FORMAT(`date`,'%Y') AS `year`,
`date`
FROM `information`
WHERE `section_id` = "
. (int)$item["section_id"]);

if(mysql_num_rows($res) > 0)
{
while ($row = mysql_fetch_assoc($res))
{
$description = htmlChars($row['description']);
$date = $row['day'] .' '. $lang_month_string[$row['month']] .' '. $row['year'];
$arr[strtotime($row['date'])] = array(
'id' => (int)$item["section_id"],
'name' => htmlChars($item["section_name"]),
'type' => htmlChars($item["section_type"]),
'description' => $description,
'date' => $date
);
}
}


Даже не знаю почему он так выводит

Спустя 14 минут, 51 секунда (24.01.2012 - 12:57) kent666 написал(а):
Добавил еще одну новость и вообще что то не коректно отсортировало
$arr =

Array
(
[1326715475] => Array
(
[id] => 9
[name] => Самая важная новость для данного сайта (обновлено)
[type] => unit
[description] =>
[date] => 16 января 2012
)

[1327318672] => Array
(
[id] => 27
[name] => новость5
[type] => unit
[description] =>
[date] => 23 января 2012
)

[1327318806] => Array
(
[id] => 6
[name] => Очень важная новость для данного сайта
[type] => unit
[description] =>
[date] => 23 января 2012
)

[1326716038] => Array
(
[id] => 10
[name] => Супер новая новость для данного сайта, На вного важнее всех предыдущих)))
[type] => unit
[description] =>
[date] => 16 января 2012
)

[1327394247] => Array
(
[id] => 28
[name] => новотсть 6
[type] => unit
[description] =>
[date] => 24 января 2012
)

)

Спустя 1 минута, 48 секунд (24.01.2012 - 12:59) Winston написал(а):
А не проще сортировку прописать в SQL? ORDER BY `date` DESC?

Спустя 8 минут, 4 секунды (24.01.2012 - 13:07) asokol написал(а):
Скоро народ будет спрашивать, как на странице отсортировать новости по дате с помощью javascript.

Спустя 19 минут, 42 секунды (24.01.2012 - 13:27) kent666 написал(а):
Winston сделал через БД!
Спасибо!
Цитата
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему? " приходит единственный вопрос - "На хрена !?"

biggrin.gif

Спустя 7 минут, 22 секунды (24.01.2012 - 13:34) XCross написал(а):
Цитата
Скоро народ будет спрашивать, как на странице отсортировать новости по дате с помощью javascript.

Как?

Спустя 42 минуты, 35 секунд (24.01.2012 - 14:17) sharki написал(а):
На пыхе пишется достаточно просто, если ты переведешь время в числа, чтобы было все нормально, если по алфавиту, то другой разговор
function up($a, $b) {
if ($a['date'] == $b['date']) { // $a['date'] указывается какое поле надо сортировать
return 0;
}
return ($a['date'] > $b['date']) ? -1 : 1; // по возрастанию
}

// сортируем
usort($arr,'up');

Спустя 1 час, 34 минуты, 2 секунды (24.01.2012 - 15:51) askar-1993 написал(а):
если массив большой больше 1000 элементов, а сортироваться должен очень быстро, то имеет смысл задуматься над другой структурой данных, а проще использовать БД

Спустя 20 минут, 31 секунда (24.01.2012 - 16:11) asokol написал(а):
Свернутый текст
kmaks, слишком быстро наступило это "Скоро" - я не успел подготовиться!

Но если это действительно интересно, то можно пообсуждать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.