Сортировать многомерный массив, созданный классом объектов, по нескольким ключам - PullRequest
0 голосов
/ 07 апреля 2011

Я хотел бы отсортировать этот многомерный массив по несколько ключей .Я пытался использовать array_multisort (), но мне не повезло из-за типа массива.

Функция, которая может иметь несколько ключей для сортировки (релевантность, дата), была бы лучше, чтобыдругие массивы с такой же структурой могут также использовать его.

Это массив $, с которым я работаю:

Array
(
    [0] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 32048
                    [id] => 32048
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [1] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 32002
                    [id] => 32002
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [2] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31921
                    [id] => 31921
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [3] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31868
                    [id] => 31868
                    [1] => 1
                    [relevancy] => 1
                )
        )
    [4] => DALQueryResult Object
        (
            [_results:DALQueryResult:private] => Array
                (
                    [0] => 31811
                    [id] => 31811
                    [1] => 1
                    [relevancy] => 1
                )
        )
)

Я пробовал эту функцию (найдено здесь ), но не повезло:

$sort = array();
foreach($array as $k=>$v) {
    $sort['relevancy'][$k] = $v['relevancy'];
    $sort['date'][$k] = $v['date'];
}
# sort by event_type desc and then title asc
array_multisort($sort['relevancy'], SORT_DESC, $sort['date'], SORT_DESC, $array);

После запуска функции array_multisort я вижу это:

Fatal error: Cannot use object of type DALQueryResult as array

Ответы [ 2 ]

1 голос
/ 20 июля 2012

Я получил хорошую подсказку от ответа сетевого кодера. Чтобы отсортировать объект customer, который не содержит члена массива в руководстве по PHP, вы должны реализовать абстрактные функции интерфейса ArrayAccess для управления членами вашего собственного класса. Эта статья поможет вам реализовать доступный массив массивов: Реализация ArrayAccess для доменных объектов

1 голос
/ 07 апреля 2011

Я так понимаю, вы используете код, который можно найти здесь .Если это так, просто измените ваш SQL-запрос следующим образом:

ORDER BY relevancy, date

В вашем случае это не сработает, поскольку DALQueryResult не является массивом, поэтому $v['relevancy'] вызовет ошибку (должно быть $v->relevancy).Даже если вы измените его, он не будет работать, потому что DALQueryResult - это объект, а не массив (и он также не реализует ArrayAccess).

Я бы также предложил вам использовать PDO вместо случайного класса, найденного в Интернете (если это так, конечно).:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...