PHP Сортировка многомерного массива по количеству элементов

У меня есть массив, такой как:

Array ( [DEF] => Array ( [0] => Array ( [type] => 1 [id] => 1212 [name] => Jane Doe [current] => 1 ) [1] => Array ( [type] => 1 [id] => 3123121 [name] => Door [current] => ) ) [ABC] => Array ( [0] => Array ( [type] => 1 [id] => 1234 [name] => John Doe [current] => ) ) [WW] => Array ( [0] => Array ( [type] => 1 [id] => 1212 [name] => Jane Doe [current] => 1 ) [1] => Array ( [type] => 1 [id] => 3123121 [name] => Door [current] => ) [2] => Array ( [type] => 1 [id] => 64646 [name] => Floor [current] => ) ) ) 

И я хочу отсортировать этот массив по числу (count ()) элементов внутреннего массива, по убыванию (т. Е. Большинство элементов сначала), поэтому у меня будет этот массив:

 Array ( [WW] => Array ( [0] => Array ( [type] => 1 [id] => 1212 [name] => Jane Doe [current] => 1 ) [1] => Array ( [type] => 1 [id] => 3123121 [name] => Door [current] => ) [2] => Array ( [type] => 1 [id] => 64646 [name] => Floor [current] => ) ) [DEF] => Array ( [0] => Array ( [type] => 1 [id] => 1212 [name] => Jane Doe [current] => 1 ) [1] => Array ( [type] => 1 [id] => 3123121 [name] => Door [current] => ) ) [ABC] => Array ( [0] => Array ( [type] => 1 [id] => 1234 [name] => John Doe [current] => ) ) ) 

Может ли кто-нибудь предложить эффективный способ сделать это? Благодарю.

Использование uksort :

 uksort($array, function($a, $b) { return count($b) - count($a); }); 

Использование array_multisort :

 array_multisort(array_map('count', $array), SORT_DESC, $array); 

С PHP <5.3:

 function sort_cb($a, $b) { return count($b) - count($a); } uksort($array, 'sort_cb'); 
 <?php function cmp($a, $b) { if ($a == $b) { return 0; } return (count($a) > count($b)) ? -1 : 1; } $a = array( "AA" => array( array('type'=>'1', 'id'=>'2'), array('type'=>'2', 'id'=>'2')), 'BB' => array( array('type'=>'1', 'id'=>'2'), array('type'=>'2', 'id'=>'2'), array('type'=>'5', 'id'=>'2')), 'CC' => array( array('type'=>'1', 'id'=>'2')) ); usort($a, "cmp"); print_r($a); ?> 
 $tempArr = $sortedArr = array(); foreach ($myArr as $k => $v) $tempArr[$k] = count($v); asort($tempArr); foreach ($tempArr as $k => $v) $sortedArr = $myArr[$k]; 

Обратите внимание, что это произойдет, если какое-либо из значений массива не является массивом, вы можете захотеть добавить is_array() где-нибудь …