Classificando uma multidimensional array?

Eu tenho uma matriz que se parece com isto:

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) 

É possível ordenar as teclas principais da matriz pela tecla [count] em cada, decrescente? Para que eles estejam na seguinte ordem: 1 -2 -0

Você definitivamente quer a function usort . Você pode definir como a function de sorting determina qual é maior ou menor.

Se está certo que cada sub-matriz (de “filtros” e “contagem”) seja re-indexada, isso deve funcionar perfeitamente. Por re-indexado, quero dizer, a matriz recém-ordenada começaria em 0, progrediria para 1, etc. Isso é quase sempre como você deseja, a menos que sua matriz original seja associativa.

Por exemplo:

 usort($array, "byCount"); function byCount($a, $b) { if( $a['count'] == $b['count'] ) { return 0; } return ($a['count'] < $b['count']) ? -1 : 1; } 

Você precisará usar a function uasort . Experimente algo como isto:

 function cmp($a, $b) { if ($a["count"] == $b["count"]) { return 0; } return ($a["count"] > $b["count"]) ? -1 : 1; } uasort($array, 'cmp');