Я думаю, что, возможно, я прочитал каждую статью о StackOverflow, но я не могу это решить. Может быть, usort
не инструмент, который мне нужен? Вот немного массива, с которым я работаю (у меня он назначен для $allPages
):
Array ( [0] => Page Object ( [id] => 4 [slug] => articles [created_on] => 2009-08-06 07:16:00 ) [1] => Page Object ( [id] => 99 [slug] => a-brief-history [created_on] => 2011-04-25 12:07:26 ) [2] => Page Object ( [id] => 98 [slug] => we-arrive [created_on] => 2011-04-24 13:52:35 ) [3] => Page Object ( [id] => 83 [slug] => new-year [created_on] => 2011-01-02 14:05:12 ) )
Я пытаюсь в конечном счете отсортировать по значению created_on
, но на данный момент я соглашаюсь на возможность сортировки по любому из них! Когда я пытаюсь usort
вызов cmp($a, $b)
с помощью usort
– как, например, в этом ответе на вопросе usort – я просто получаю пустой. Пример:
function cmp($a, $b) { return strcmp($a["slug"], $b["slug"]); } usort($allPages, 'cmp')
И print_r
ничего мне не дает. Это с PHP 5.2.n, а не 5.3 btw.
Руководство, пожалуйста? И благодарю вас!
Ваши элементы в массиве являются объектами, а не ассоциативными массивами, поэтому вам нужно обращаться к ним следующим образом:
function cmp($a, $b) { return strcmp($a->slug, $b->slug); } usort($allPages, 'cmp')
Ваш дамп массива говорит, что элементы – это объекты страницы, а не массивы. Случайно, вам нужно сказать $a->created_on
вместо $a['created_on']
? Использование нотации объектов вместо обозначения массива.
Просто гадать …
Как предлагает @Tesserex, вам нужно использовать нотацию объектов вместо обозначения массива.
Если вы включили уведомления, вы получите сообщения об ошибках в доступе к объекту в виде массива.
Другое дело, что у ваших страниц не все есть атрибут «created_on», у некоторых есть атрибут «published_on». Вам нужно будет выполнить некоторую проверку ошибок / логику внутри вашего метода usort, чтобы убедиться, что ключ, который вы хотите отсортировать, доступен, и делать что-то, когда это не так.