PHP:数组中所有元素的数量

时间:2013-09-30 12:40:59

标签: php

有没有办法找出所有嵌套级别中一个数组中有多少个值元素?

如果$_REQUEST指令所规定的限制几乎达到,我想知道max_input_vars中有多少人发出警告?

我想只计算实际值,所以数组元素如果是另一个数组则不应计算(参见 http://pastebin.com/QAKxxqJf

5 个答案:

答案 0 :(得分:6)

使用:count($array_name, COUNT_RECURSIVE);

因为count方法采用第二个参数,即模式。 int COUNT_NORMALCOUNT_RECURSIVE

答案 1 :(得分:2)

使用array_walk_recursive计算所有不属于arrayobject类型的元素:

$count = 0;
array_walk_recursive($a, function($v) use(&$count) {
    if(!is_object($v)) ++$count;      //or if(is_string($v))
});

答案 2 :(得分:1)

这是我的PHP< = 5.2

的解决方案
/**
 * Counts only the real values, so array-elements
 * are not counted if they are another array.
 *
 * @param array $array
 * @return int
 * @author Muslim Idris
 */
function count_recursive($array) {
    $count = 0;
    foreach ($array as $v) {
            if (is_array($v)) $count += count_recursive($v);
            else $count++;
    }
    return $count;
}

答案 3 :(得分:0)

我无法使用count($_REQUEST, COUNT_RECURSIVE),因此我使用了:

function count_recursive($array) {
  $count = 0;
  foreach ($array as $id => $_array) {
    if (is_array ($_array)) $count += count_recursive ($_array);
    else $count += 1;
  }
  return $count;
} 
$num=count_recursive($_REQUEST);
$max=ini_get('max_input_vars');
$debug=true;
if($debug and $max - $num < 50) {
  echo "Warning:Number of requests ($num) is near the value of max_input_vars:$max";
}

(虽然在我的测试服务器上仍有一个奇怪的事情,但那是另一个问题:why is the number of elements in $_REQUEST smaller than the limit i set by max_input_vars?并且可能是PHP中的错误

答案 4 :(得分:-2)

检查以下链接,了解使用计数功能的所有选项

http://php.net/manual/en/function.count.php