我是这个阵列:
Array
(
[self] => Folder A
[my_data] => Array
(
)
[18] => Array
(
[self] => Folder AA
[my_data] => Array
(
[0] => stdClass Object()
)
[20] => Array
(
[self] => Folder AA
[my_data] => Array
(
[0] => stdClass Object()
)
[21] => Array
)
我想在' my_data
'中获取当前记录的总数。为此,我创建了这个函数,递归调用以添加计数:
function getDocumentCount($tab, $count = 0) {
foreach ($tab as $subTabKey => $subTabValue) {
if ($subTabKey == 'my_data') {
$count += count($subTabValue);
}
if ( count($tab) > 2 && $subTabKey != 'self' && $subTabKey != 'my_data' ) {
$count += getDocumentCount($subTabValue, $count);
}
}
return $count;
}
但是这个函数总是返回0.上面的例子应该返回2
编辑:这应该返回5但返回9
Array
(
[self] => Main Folder 22
[my_data] => Array
(
)
[17] => Array
(
[self] => New Sub
[my_data] => Array
(
[0] => stdClass Object()
[1] => stdClass Object()
)
)
[8] => Array
(
[self] => sub folder 21
[my_data] => Array
(
)
[9] => Array
(
[self] => sub folder 211
[my_data] => Array
(
[0] => stdClass Object()
[1] => stdClass Object()
[2] => stdClass Object()
)
)
)
)
答案 0 :(得分:0)
您没有将对getDocumentCount()
的通话结果添加到您的计数中。尝试将函数的第六行更改为:
$count += getDocumentCount($subTabValue, $count);
这可以解决您的问题吗?
答案 1 :(得分:0)
您刚刚计算了my_data长度为0的数组的第一个维度,因此$ count为0.虽然您还计算了数组的内部维度,但您没有对它们的输出求和。您还必须对内部输出的输出求和。
function getDocumentCount($tab, &$count) {
foreach ($tab as $subTabKey => $subTabValue) {
if ($subTabKey == 'my_data') {
$count += count($subTabValue);
}
if ( count($tab) > 2 && $subTabKey != 'self' && $subTabKey != 'my_data' ) {
getDocumentCount($subTabValue, $count);
}
}
}
使用它:
$count = 0;
getDocumentCount($tab, $count);
echo $count;