我有这个多维数组:
Array
(
[0] => Array
(
[0] => 2012-02-26 07:15:00
)
[1] => Array
(
[0] => 2012-02-26 17:45:00
[1] => 2012-02-26 18:55:00
)
[2] => Array
(
[0] => 2012-02-26 18:55:00
[1] => 2012-02-26 17:45:00
)
[3] => Array
(
[0] => 2012-02-26 18:57:00
[1] => 2012-02-26 17:45:00
[2] => 2012-02-26 18:55:00
)
当我计算子阵列时,我得到了1,2,2,3。我怎么能在3,2,2,1中收到它?我需要获得具有最高子阵列计数的最后3个子阵列(DESC,它意味着3,2,2)。我怎样才能做到这一点?
答案 0 :(得分:7)
您可以使用usort功能来实现它。
function cmp($a, $b){
return (count($b) - count($a));
}
usort($array, 'cmp');
$highest_3_sub_arrays = array_slice($array, 0, 3);
答案 1 :(得分:3)
这可能是你寻求的:
natsort($sub_count);
$rev = array_reverse($sub_count);
$result = array_pad($rev, 3);
如果您拥有的值已按顺序排列,则可能需要省略实际排序。
答案 2 :(得分:1)
$sizes=array();
foreach ($myarray as $k=>$v)
if (!is_array($v)) $sizes["$k"]=0;
else $sizes["$k"]=sizeof($v);
sort($sizes);
echo array_pop($sizes); //outputs 3
echo array_pop($sizes); //outputs 2
echo array_pop($sizes); //outputs 2
答案 3 :(得分:0)
在我看来,所有其他答案都在努力工作。 usort()
,count()
和foreach()
是不必要的,当我尝试natsort()
时,它给了我:<b>Notice</b>: Array to string conversion in <b>[...][...]</b>
。
rsort()将放置最长的子阵列。
代码:
$array=array(
["2012-02-26 18:55:00","2012-02-26 17:45:00"],
["2012-02-26 07:15:00"],
["2012-02-26 18:57:00","2012-02-26 17:45:00","2012-02-26 18:55:00"],
["2012-02-26 17:45:00","2012-02-26 18:55:00"]
);
$size=3; // modify this line to declare how many subarrays to capture
rsort($array); // sort the subarrays in DESC order
var_export(array_slice($array,0,$size)); // print the first n subarrays
输出:
array (
0 =>
array (
0 => '2012-02-26 18:57:00',
1 => '2012-02-26 17:45:00',
2 => '2012-02-26 18:55:00',
),
1 =>
array (
0 => '2012-02-26 18:55:00',
1 => '2012-02-26 17:45:00',
),
2 =>
array (
0 => '2012-02-26 17:45:00',
1 => '2012-02-26 18:55:00',
),
)
如果你想实现一些额外的排序来打破长度关系(比如你的两个2元素子阵列之间),那么你需要在你的问题中指明它。