我正在写一个递归计算数组元素的函数。
但结果是假的。
有什么问题吗?
$schema = array(
'div' => array(
'class' => 'lines',
'div' => array(
'span' => array(
'key' => 'Product Name'
),
'val' => 'Soap'
),
'layer' => array(
'span' => array(
'key' => 'Product Name'
),
'val' => 'Ball'
)
)
);
function count_r($array, $i = 0){
foreach($array as $k){
if(is_array($k)){ $i += count_r($k, count($k)); }
else{ $i++; }
}
return $i;
}
echo count_r($schema);
7条答案
按热度按时间o3imoua41#
PHP中有一个内置函数,您可以用途:count()。
这是你可以使用它的方式:
这个函数还检测递归以避免无限循环,因此它比其他答案中的解决方案更安全。
mum43rcc2#
PHP有一个用于此目的的内置方法,称为
count()
。如果不带任何附加参数传递,count()
返回第一级数组键的数量。但是,如果您向count方法count( $schema, true )
传递第二个参数,则结果将是多维数组中键的总数。标记为正确的响应仅迭代第一级和第二级数组,如果该数组中有第三个子数组,则不会返回正确的答案。不过,如果你真的想写自己的count()方法,这可以写成递归函数。
brvekthn3#
转自以下评论回答:
基本上,当您将该数组的
count_r
添加到当前级别时,您不需要在第二个参数中考虑计数-您基本上将其添加两次。但是,您需要在其中添加“1”来计算数组本身。如果你只想计算元素而不是数组,你只需要把“1”变成“0”。这是测试和工作正常。
sbdsn5lh4#
你的函数可以很简单
7xzttuei5#
我修改了你的密码。请检查一下。它工作正常。
);
} getchar($char);
jogvjijk6#
如果你想计算特定的键/值,你可以使用内置的array_walk_recursive和一个闭包函数。
vohkndzv7#
count($array,$array)-count($array)