我有一个数组,例如:
$array = [
'DEF' => [
['type' => 1, 'id' => 1212, 'name' => 'Jane Doe', 'current' => 1],
['type' => 1, 'id' => 3123121, 'name' => 'Door', 'current' => null],
],
'ABC' => [
['type' => 1, 'id' => 1234, 'name' => 'John Doe', 'current' => null],
],
'WW' => [
['type' => 1, 'id' => 1212, 'name' => 'Jane Doe', 'current' => 1],
['type' => 1, 'id' => 3123121, 'name' => 'Door', 'current' => null],
['type' => 1, 'id' => 64646, 'name' => 'Floor', 'current' => null],
]
];
我想按照内部数组项的数量(count(((降序排列这个数组(即大多数项优先(,所以我会有这个数组:
[
'WW' => [
['type' => 1, 'id' => 1212, 'name' => 'Jane Doe', 'current' => 1],
['type' => 1, 'id' => 3123121, 'name' => 'Door', 'current' => null],
['type' => 1, 'id' => 64646, 'name' => 'Floor', 'current' => null],
],
'DEF' => [
['type' => 1, 'id' => 1212, 'name' => 'Jane Doe', 'current' => 1],
['type' => 1, 'id' => 3123121, 'name' => 'Door', 'current' => null],
],
'ABC' => [
['type' => 1, 'id' => 1234, 'name' => 'John Doe', 'current' => null],
]
];
有人能提出一个有效的方法吗?谢谢
使用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()
检查。。。
如果您只担心按大小排序,而不担心实际质量,则可以使用最简单的方法使用arsort()
按降序排序并保留键。
成员较少的数组较小,如果在操作数2中找不到操作数1中的键,则数组是不可比的,否则-逐值比较(参见以下示例(
如果您有多个大小相同的行,那么它们将根据实际数据进一步降序排列。
代码:(演示(
arsort($array);
var_export($array);