2017-01-07 75 views
2

我有此數組:獲取所有數據的總和的多維數組裏面遞歸:

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

您剛剛計算出my_data的長度爲0的數組的第一維,所以$ count爲0.雖然您也計算了數組的內部dimimension,但是您沒有對它們的輸出求和。您還必須對內部輸出的輸出進行求和。

$count = 0; 
getDocumentCount($tab, $count); 
echo $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); } } } 

在使用它。你可以請看一看,並指導我通過這 – pkdq

+0

@pkdq我編輯它。現在檢查。稍等片刻,我需要編輯更多 –

+0

非常感謝。我非常感謝你的幫助。急切地等待解決方案 – pkdq

0

您不會將調用的結果加到getDocumentCount()之內。嘗試將您的功能的第六行更改爲:

$count += getDocumentCount($subTabValue, $count); 

這是否解決了您的問題?