3

我有这个多维数组:

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

4

4 回答 4

8

您可以通过使用usort功能来实现它。

function cmp($a, $b){
    return (count($b) - count($a));
}
usort($array, 'cmp');
$highest_3_sub_arrays = array_slice($array, 0, 3);
于 2012-02-26T17:59:07.460 回答
3

这可能是您所寻求的:

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

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

于 2012-02-26T17:58:02.677 回答
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
于 2012-02-26T17:59:20.570 回答
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 元素子数组之间),那么你需要在你的问题中指定它。

于 2017-04-17T23:42:54.183 回答