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

Weird values when calculating number of items in a multidimensional array

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

// 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>';

奇怪的是现在是 returning 27??当它应该是 9 时,我不明白它从哪里得到那个值。

我也测试了

echo count($marks, COUNT_RECURSIVE);

但是 return 是 38 所以我真的很困惑!

不胜感激。

您正在计算数组中的字段。您似乎在问如何计算每个都有一个 id 的整个数组等等——这就是产生 9 的结果。要做到这一点,而不是在 is_array 为假时递增计数,在它为真时递增。与其以递归方式传回该元素,不如查看它是否具有 ['child'] 并以递归方式传递该元素。否则,'child' 集合本身会被计算在内,您会得到 11。或者,您可以仅在设置 'id' 时增加计数器。

下面是 COUNT_RECURSIVE 得到 38 的方法:

$marks 有四个值,索引为 0、1、2 和 3。这样计数为 4。

$marks[0] 到 $marks[3] 每个都有三个命名元素:'id'、'parent_id' 和 'title',合起来是 12。现在计数是 16 .

$marks[2] 也有一个 'child'。那就是 17.

$marks[2]['child'] 具有三个索引为 0、1 和 2 的元素。这就是 20.

每个都有三个命名元素,共 29 个。

$marks[2]['child'][1] 有一个 'child',使 30.

它有元素 0 和 1,所以是 32。

这两个都有三个命名元素。 38.