计算多维数组中的项数时的奇怪值

时间:2015-10-14 10:45:46

标签: php arrays multidimensional-array count

我遇到问题在多维数组中返回正确数量的项目,我不知道我做错了什么,所以我有点困惑。

// 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所以我真的很困惑!

非常感谢帮助。

1 个答案:

答案 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。