Как мне отсортировать этот массив по ключу с помощью usort? - PullRequest
5 голосов
/ 06 мая 2011

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

Руководство, пожалуйста? И спасибо!

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Ваши элементы в массиве являются объектами, а не ассоциативными массивами, поэтому вы должны ссылаться на них следующим образом:

function cmp($a, $b) {
  return strcmp($a->slug, $b->slug);
}
usort($allPages, 'cmp')
3 голосов
/ 06 мая 2011

Ваш дамп массива говорит, что элементы являются объектами страницы, а не массивами.Случайно, вам нужно сказать $a->created_on вместо $a['created_on']?Использование обозначения объекта вместо обозначения массива.

Просто угадывание ...

1 голос
/ 06 мая 2011

Как подсказывает @Tesserex, вам нужно использовать обозначение объекта вместо обозначения массива.

Если бы у вас были включены уведомления, вы получите сообщения об ошибках доступа к объекту в виде массива.

Еще одна вещь, которую стоит учесть, это то, что все ваши страницы не имеют атрибута create_on, а некоторые имеют атрибут publ_on.Вам нужно будет выполнить некоторую проверку на наличие ошибок / логику в вашем методе usort, чтобы убедиться, что ключ, по которому вы хотите отсортировать, доступен, и сделать что-то, когда его нет.

...