有没有办法找出所有嵌套级别中一个数组中有多少个值元素?
如果$_REQUEST
指令所规定的限制几乎达到,我想知道max_input_vars
中有多少人发出警告?
我想只计算实际值,所以数组元素如果是另一个数组则不应计算(参见 http://pastebin.com/QAKxxqJf)
答案 0 :(得分:6)
使用:count($array_name, COUNT_RECURSIVE);
因为count
方法采用第二个参数,即模式。 int
COUNT_NORMAL
或COUNT_RECURSIVE
答案 1 :(得分:2)
使用array_walk_recursive
计算所有不属于array
或object
类型的元素:
$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)
检查以下链接,了解使用计数功能的所有选项