Как отсортировать этот массив по атрибуту pos
даже если ключи ( name, store_id, product etc.
)
[Attributes] => Array ( [name] => Array ( [pos] => 30 ) [store_id] => Array ( [pos] => 10 ) [product] => Array ( [pos] => 20 ) )
Редактировать: производительность важна, конечно.
Вы можете использовать uasort()
который позволяет вам определять вашу логику сортировки, а также поддерживать ваши ассоциативные индексы. Обратите внимание, что он изменяет исходный массив и возвращает только boolean на основе успеха.
uasort($your_array, function($a, $b) { return $a['pos'] > $b['pos']; });
Мой пример работает> = PHP 5.3, но для более старых версий вы также можете использовать обычную функцию сравнения.
Подробнее uasort()
Документацию uasort()
.
Посмотрите на функцию 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);