Php 按多维数组的子数组大小对其排序

Php 按多维数组的子数组大小对其排序,php,sorting,multidimensional-array,sub-array,Php,Sorting,Multidimensional Array,Sub Array,我有一个多维数组: 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 (

我有一个多维数组:

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)。我如何才能做到这一点?

这可能是您所寻求的:

natsort($sub_count);
$rev = array_reverse($sub_count);
$result = array_pad($rev, 3);

如果已有的值已按顺序排列,您可能希望忽略实际排序。

您可以通过使用函数来实现它

function cmp($a, $b){
    return (count($b) - count($a));
}
usort($array, 'cmp');
$highest_3_sub_arrays = array_slice($array, 0, 3);

在我看来,所有其他答案都太难了
usort()
count()
foreach()
是不必要的,当我尝试
natsort()
时,它告诉我:
注意:数组到字符串的转换在[…][…]

将把最长的子阵列放在第一位

代码:

输出:

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元素子阵列之间),那么您需要在问题中指定它。

相关部分中有这么多重复项-->谢谢,它也可以。只需将echo重命名为:print_r(array_pop($size))//输出3个打印(数组大小($size))//输出2个打印(数组大小($size))//输出2@peter我正在重温我的旧答案,看看是否可以改进它们。据我所知,没有比我发布的更好的方法了。你认为我的答案是一种解决办法吗?
$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',
  ),
)