带count()的未定义偏移量

时间:2011-01-19 17:34:23

标签: php multidimensional-array count

我有一个数组$MyArray,它有一些也是数组的元素(让我们称之为子数组)。我想知道具有最多元素的子阵列有多少元素。问题是,我不知道索引是否存在:

 max(
     @count($MyArray[$i*7]), 
     @count($MyArray[$i*7+1]), 
     @count($MyArray[$i*7+2]),         
     @count($MyArray[$i*7+3]),
     @count($MyArray[$i*7+4]),
     @count($MyArray[$i*7+5]),
     @count($MyArray[$i*7+6])
 );

$MyArray

的结构
Array(
  12 => array ( 
        0 => array ( 0 => 0, 1 => 1, ), 
        1 => array ( 0 => 13, 1 => 1, ), 
        2 => array ( 0 => 15, 1 => 1, ), 
        3 => array ( 0 => 20, 1 => 1, ), 
        4 => array ( 0 => 69, 1 => 1, ) 
  ),
  5 => array ( 
        0 => array ( 0 => 55, 1 => 1, ), 
        1 => array ( 0 => 32, 1 => 1, ), 
        2 => array ( 0 => 12, 1 => 1, ), 
        3 => array ( 0 => 21, 1 => 5, ) 
  ),
  ....
)

这可以做得更好(更快)吗?

编辑:我知道foreach并且我不想遍历此数组中的每个元素。我只想要它的间隔。使用@,因为我不知道$MyArray[$i*7 + x]Null还是array

$i是[0,1,2,3,4]的元素(有时也是5)

5 个答案:

答案 0 :(得分:4)

$biggest = 0;
foreach ($MyArray as $value) {
    if ($biggest < count($value)) {
        $biggest = count($value);
    }
}

我知道,你想要数组中最大数组的大小,对吗?

答案 1 :(得分:3)

简单和老派的方法:

<?php

$max = -1;
foreach($MyArray as $subarray)
{
    $items = count($subarray);
    if($items > $max)
         $max = $items;
}

echo $max;
?>

这样做效果最好,因为您只想知道元素数量最多的子元素

答案 2 :(得分:3)

$max = 0;
foreach ($MyArray as $value) {
    $max = max($max,count($value));
}

答案 3 :(得分:2)

试试这个:

$arr = array();
for ($j=0;$j<=6;$j++) {
   if (isset($MyArray[$i*7+$j])) $arr[] = count($MyArray[$i*7+$j]);
}
$result = max($arr);

我不确切地知道$i指的是什么......

答案 4 :(得分:1)

// get the interesting part of the array
$chunk = array_intersect_key($input_array, array_flip(range($i*7, $i*7+6))); 
// max(count)
$max = $chunk ? max(array_map('count', $chunk)) : 0;