Intereting Posts

Как я должен сортировать этот массив по ключу с помощью usort?

Я думаю, что, возможно, я прочитал каждую статью о 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, чтобы убедиться, что ключ, который вы хотите отсортировать, доступен, и делать что-то, когда это не так.