У меня есть массив, который выглядит так:
Array ( [0] => Array ( [filters] => Array ( [filter_1] => 1 [filter_2] => 1 [filter_3] => 1 [filter_4] => 1 [filter_5] => 1 [filter_6] => 1 ), [count] => 2), [1] => Array ( [filters] => Array ( [filter_1] => 1 [filter_2] => 1 [filter_3] => 1 [filter_4] => 1 [filter_5] => 1 [filter_6] => 1 ), [count] => 34) [2] => Array ( [filters] => Array ( [filter_1] => 1 [filter_2] => 1 [filter_3] => 1 [filter_4] => 1 [filter_5] => 1 [filter_6] => 1 ), [count] => 7)
Можно ли сортировать ключи основного массива с помощью клавиши [count] в каждом, по убыванию? Чтобы они находились в следующем порядке: 1 -2 -0
Вы определенно хотите функцию usort . Вы можете определить, как определяет функция сортировки, которая больше или меньше.
Если все в порядке, то каждый под-массив (из «фильтров» и «подсчет») переиндексируется, это должно работать отлично. Повторно проиндексировав, я имею в виду, что вновь отсортированный массив начинался с 0, до 1 и т. Д. Это почти всегда, как вы хотите, если ваш исходный массив не является ассоциативным.
Например:
usort($array, "byCount"); function byCount($a, $b) { if( $a['count'] == $b['count'] ) { return 0; } return ($a['count'] < $b['count']) ? -1 : 1; }
Вам нужно будет использовать функцию uasort
. Попробуйте что-то вроде этого:
function cmp($a, $b) { if ($a["count"] == $b["count"]) { return 0; } return ($a["count"] > $b["count"]) ? -1 : 1; } uasort($array, 'cmp');