У меня есть массив, такой как:
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()
где-нибудь …