2015-10-14 56 views
0

我有問題返回多維數組項目的正確的號碼,我不知道我在做什麼錯了,所以我有點糊塗計算項目的數量時。怪異值多維數組

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

您正在計數數組中的字段。你似乎在問如何計算每個都有一個id的整個數組等 - 這就是產生的結果9.要做到這一點,而是在is_array爲false時遞增計數,當它爲true時遞增。而不是遞歸地傳遞該元素,看它是否有['child']並遞歸傳遞。否則,'孩子'集合本身會被計數,你得到11。或者,只有在'id'被設置的情況下,纔可以增加計數器。

這裏的COUNT_RECURSIVE如何到達38:

$標誌有四個值,指數爲0,1,2,和3這使得4.

$標記計數到$標記[0] [3]分別具有三個已命名的元素:「編號」,「PARENT_ID」和「標題」,一起製作12.計數現在16.

$馬克[2]具有「子」也。這使得17.

$馬克[2] [「子」]已將三個元素索引爲0,1,和2,使20.

每個那些具有三個已命名元素,使得29.

$馬克[2] [ '子'] [1]具有 '兒童',使30.

即具有元素0和1,使32

這兩個中的每一個具有三個命名元素。 38.

+0

THX保羅!剛剛得到它的工作! – John