有没有办法找出所有嵌套级别的一个数组中有多少个值元素?
如果指令规定的限制即将达到,我想知道有多少人会$_REQUEST
发出警告?max_input_vars
我只想计算实际值,因此如果数组元素是另一个数组,则不应计算它们(请参阅 http://pastebin.com/QAKxxqJf)
有没有办法找出所有嵌套级别的一个数组中有多少个值元素?
如果指令规定的限制即将达到,我想知道有多少人会$_REQUEST
发出警告?max_input_vars
我只想计算实际值,因此如果数组元素是另一个数组,则不应计算它们(请参阅 http://pastebin.com/QAKxxqJf)
use: count($array_name, COUNT_RECURSIVE);
as count
method takes a second argument which is the mode. int
COUNT_NORMAL
or COUNT_RECURSIVE
用于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))
});
这是我对 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;
}
我不能使用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 中的一个错误)
检查以下链接以获取使用计数功能的所有选项