我遇到问题在多维数组中返回正确数量的项目,我不知道我做错了什么,所以我有点困惑。
// Build test array
$marks = Array();
$marks[] = array("id" => 1, "parent_id" => "0", "title" => "Games");
$marks[] = array("id" => 2, "parent_id" => "0", "title" => "Food");
$marks[] = array("id" => 3, "parent_id" => "0", "title" => "Houses");
$marks[] = array("id" => 4, "parent_id" => "0", "title" => "Cities");
$marks[2]['child'][] = array("id" => 4, "parent_id" => "0", "title" => "Big House");
$marks[2]['child'][] = array("id" => 4, "parent_id" => "0", "title" => "Small House");
$marks[2]['child'][] = array("id" => 4, "parent_id" => "0", "title" => "Castle");
$marks[2]['child'][1]['child'][] = array("id" => 4, "parent_id" => "0", "title" => "Living Room");
$marks[2]['child'][1]['child'][] = array("id" => 4, "parent_id" => "0", "title" => "Kitchen");
function count_recursive ($array, $limit) {
$count = 0;
foreach ($array as $id => $_array) {
if (is_array ($_array) && $limit > 0) {
$count += count_recursive ($_array, $limit - 1);
} else {
$count += 1;
}
}
return $count;
}
echo '###' . count_recursive($marks, 5);
echo '<pre>' . print_r($marks, 1) . '</pre>';
奇怪的是,它正在返回27?当它应该是9时,我不明白它获得该值的位置。
我也测试了
echo count($marks, COUNT_RECURSIVE);
但它返回38所以我真的很困惑!
非常感谢帮助。
答案 0 :(得分:1)
您正在计算数组中的字段。你似乎在问如何计算每个都有id的整个数组等等 - 这会产生什么9。为了做到这一点,而不是当is_array为false时增加计数,当它变为&#39;真的。而不是递归地传递该元素,看看它是否有[&#39; child&#39;]并递归传递。除此之外的孩子&#39;收集本身会被计算,你会得到11.或者,只有在&#39; id&#39;已经确定了。
这是COUNT_RECURSIVE获得38的方式:
$ marks有四个值,索引为0,1,2和3.这使得计数为4.
$ marks [0]到$ marks [3]每个都有三个命名元素:&#39; id&#39;,&#39; parent_id&#39;和&#39; title&#39;,一起制作12.现在是16岁。
$ marks [2]有一个孩子&#39;也。那就是17。
$ marks [2] [&#39; child&#39;]有三个元素,索引为0,1和2.这就是20。
每个都有三个命名元素,制作29个。
$ marks [2] [&#39;孩子&#39;] [1]有一个孩子&#39;,30岁。
具有元素0和1,形成32。
这两个中的每一个都有三个命名元素。 38。