2

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

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

我只想计算实际值,因此如果数组元素是另一个数组,则不应计算它们(请参阅 http://pastebin.com/QAKxxqJf

4

5 回答 5

6

use: count($array_name, COUNT_RECURSIVE);

as count method takes a second argument which is the mode. int COUNT_NORMAL or COUNT_RECURSIVE

于 2013-09-30T12:42:35.493 回答
2

用于array_walk_recursive计算所有非 typearray或的元素object

$count = 0;
array_walk_recursive($a, function($v) use(&$count) {
    if(!is_object($v)) ++$count;      //or if(is_string($v))
});
于 2013-09-30T14:29:09.497 回答
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;
}
于 2013-12-05T22:10:27.363 回答
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";
}

(虽然我的测试服务器上还有一个奇怪的事情,但那是另一个问题:为什么 $_REQUEST 中的元素数量小于我设置的 max_input_vars 的限制?也许是 PHP 中的一个错误)

于 2013-09-30T12:51:47.310 回答
-2

检查以下链接以获取使用计数功能的所有选项

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

于 2013-09-30T12:44:53.697 回答