Как отсортировать многомерный массив (PHP)? - PullRequest
1 голос
/ 09 мая 2011

Как отсортировать этот массив по атрибуту pos , хотя ключи (name, store_id, product etc.)

[Attributes] => Array
(
    [name] => Array
        (
            [pos] => 30
        )

    [store_id] => Array
        (
            [pos] => 10
        )

    [product] => Array
        (
            [pos] => 20
        )

)

Редактировать: производительность, конечно, важна.

Ответы [ 2 ]

5 голосов
/ 09 мая 2011

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

uasort($your_array, function($a, $b) {
    return $a['pos'] > $b['pos'];
});

Мой пример работает> = PHP 5.3, но для более старых версий вы также можете использовать обычную функцию сравнения.

Подробнее см. uasort() Документация .

5 голосов
/ 09 мая 2011

Посмотрите на функцию PHP array_multisort.

http://php.net/manual/en/function.array-multisort.php

В комментариях есть пример-функция, которая подойдет вам:

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

// $dataArray is the array that contains your data
$sorted = array_orderby($dataArray, 'pos', SORT_DESC);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...