[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка по столбцу двумерного массива по дате.
oleg17
Я знаю что уже публиковалась такая тема здесь, но я так и не смог разобраться, так как приведённый там пример у меня не работает.
Вот мой масив ( на самом деле строчек около 200)

Array
(
[0] => stdClass Object
(
[id] => 1185
[title] => Вопросы образования и воспитания
[created] => 2011-03-29 18:28:39
)

[1] => stdClass Object
(
[id] => 2069
[title] => Образование в эпоху Интернет
[created] => 2011-02-15 22:21:41
)
)

Может у меня не работает, так как у меня внутри не Array, а stdClass Object?

Нужно отсортировать по "created".
Подскажите пожалуйста вариант реализации.



Спустя 17 минут, 13 секунд (2.04.2011 - 18:14) alex12060 написал(а):
Oo
Class? Object?
Ты класс штоле разносишь?

Спустя 3 минуты, 29 секунд (2.04.2011 - 18:17) oleg17 написал(а):
не понял вопроса.

p.s.
Изначальный код поменять нельзя. Сейчас дорабатываю joomlу под свои нужды.

Спустя 1 час, 42 минуты, 6 секунд (2.04.2011 - 19:59) Snus написал(а):
oleg17
usort();

Спустя 4 минуты, 16 секунд (2.04.2011 - 20:04) oleg17 написал(а):
Цитата (Snus @ 2.04.2011 - 16:59)
oleg17
usort();

Вы внимательно читали первый мой пост?.
По примеру у меня не получилось сделать.
Потому и спрашиваю.

Вот что у меня было:
function cmp($p, $q) { return $p[created] == $q[created] ? 0
: ($p[created] < $q[created] ? 1 : -1); }

usort($rows3, cmp);


Сортирует по совсем непонятному критерию, причём если полностью закомментировать содержимое фунцуии cmp, результат остаётся тот-же.

Спустя 1 час, 55 минут, 6 секунд (2.04.2011 - 21:59) KonstantinK написал(а):
Мне кажется что вот это
($p[created]  < $q[created] ? 1 : -1);
сравнение не совсем корректно. Может стоит сравнивать метки времени?

Спустя 7 минут, 36 секунд (2.04.2011 - 22:06) oleg17 написал(а):
Цитата (KonstantinK @ 2.04.2011 - 18:59)
Мне кажется что вот это
($p[created]  < $q[created] ? 1 : -1);
сравнение не совсем корректно. Может стоит сравнивать метки времени?

Может и стоит сравнить отметки времени, только я не знаю как.

Спустя 4 минуты, 7 секунд (2.04.2011 - 22:10) Trianon написал(а):
KonstantinK
Сравнение вполне корректно.
ISO-формат представления даты-времени (подмножеством коего является YYYY-MM-DD HH:MM:SS) вполне допускает сравнение дат, как строк, на больше/меньше/равно более того, он и разрабатывался с учетом этой возможности.

Спустя 4 минуты, 9 секунд (2.04.2011 - 22:15) Trianon написал(а):
oleg17


так может там нужно $p->created писать?

Перед тем, как что-то сравнивать, нужно убедиться, что Вы в состоянии корректно извлечь данные из контейнера.

Спустя 13 минут, 19 секунд (2.04.2011 - 22:28) KonstantinK написал(а):
Trianon Не знал про сравнение , спасибо буду знать.

Спустя 3 минуты, 40 секунд (2.04.2011 - 22:31) oleg17 написал(а):
да проверил, не могу достать.

Вот так один Object можно перевести в array.
$arrayTwo = (array)$array[0];

Как мне перевести весе stdClass Object в $array;



Спустя 4 минуты, 21 секунда (2.04.2011 - 22:36) Trianon написал(а):
ну так переведите отдельно $p и отдельно $q.

Спустя 6 минут, 44 секунды (2.04.2011 - 22:43) oleg17 написал(а):
Цитата (Trianon @ 2.04.2011 - 19:36)
ну так переведите отдельно $p и отдельно $q.

Как я понял $p и $q это параметр по которому сравниваем.

У меня 200 строчек, а не 2. как мне их перевести?

p.s. Уже хочу сказать вам большое спасибо, так как хоть проблему с места сдвинул.

Спустя 3 минуты, 11 секунд (2.04.2011 - 22:46) Trianon написал(а):
$p и $q это не параметр.
Это и есть сравниваемые элементы большого массива.
В Вашем случае - оба одинакового типа stdClass Object

Спустя 44 минуты, 31 секунда (2.04.2011 - 23:30) oleg17 написал(а):
И как мне все 200 stdClass Object , которые находятся в одном массиве, перевести в нужный мне формат.

Спустя 13 минут, 18 секунд (2.04.2011 - 23:44) Trianon написал(а):
какие двести?
function cmp($pc, $qc) 
{
$p = (array) $pc; $q = (array) $qc;
return $p['created'] == $q['created'] ? 0
: ($p['created'] < $q['created'] ? 1 : -1);
}

Спустя 10 часов, 28 минут, 14 секунд (3.04.2011 - 10:12) oleg17 написал(а):
Как говорят утро вечером мудренее. Проснулся и пришёл ответ.
нужно было в функции сравнения добавить строчки
  $p=(array)$p;
$q=(array)$q;


И Проблема решена.
Всем Большое спасибо



Смешно сначала опубликовал потом посмотрел, что уже это написали.

Спустя 15 минут, 54 секунды (3.04.2011 - 10:28) Trianon написал(а):
oleg17
теперь перечитайте наш диалог начиная с 22:31 MSK - станет еще смешнее.
Быстрый ответ:

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