2014-10-29 50 views
0

腓遞歸函數我有一個數組$樹這種結構:爲樹狀

Array 
(
    [0] => Array 
     (
      ['fichier'] => 'test.xml' 
      ['classes'] => Array 
         (
          [0] => Array 
            (
            ['Id'] => '10' 
            ['IdParent'] => 'L' 
           ) 
          [1] => Array 
            (
            ['Id'] => '10-01' 
            ['IdParent'] => '10' 
           ) 
          ... 
         ) 
     ) 
    [1] => Array 
     (
      ['fichier'] => 'test2.xml' 
      ['classes'] => Array 
         (
          [0] => Array 
            (
            ['Id'] => '10' 
            ['IdParent'] => 'L' 
           ) 
          [1] => Array 
            (
            ['Id'] => '10-02' 
            ['IdParent'] => '10' 
           ) 
          ... 
         ) 
     ) 
     ) 
    [2] => Array 
     (
      ... 
     ) 
    ... 
) 

所以結構像

L    L   ... 
10    10 
10-01   10-02 
10-01-01  10-02-02 
10-01-02  10-02-03 

,我嘗試做一個TreeView,如:

L 
-> 10 
    -> 10-01 
     -> 10-01-01 
     -> 10-01-02 
    -> 10-02 
     -> 10-02-02 
     -> 10-02-03 

我寫了一個遞歸函數:

function treeview($tree, $indiceTree, &$prec, $id = 'ICM'){     
       $indice = 0; 
       for ($i = ($indiceTree-sizeof($tree)); $i < sizeof($tree); $i++) { 
        for ($j = 0; $j < sizeof($tree[$i]['classes']); $j++) {      
         if($tree[$i]['classes'][$j]['IdParent']==$id) { 
          if (strpos($prec,$tree[$i]['classes'][$j]['Id']) == false) {         
           echo $tree[$i]['classes'][$j]['Id']; echo "<br><br>";        
           $prec .= ";".$tree[$i]['classes'][$j]['Id']; 
           break;        
          }           
          treeview($tree, $indiceTree+$indice,$prec, $tree[$i]['classes'][$j]['Id']);       
          break; 
         } 
        } 
        $indice++;     
       }        
      } 

問題是這個功能永遠不會停止。我的意思是顯示結果不錯,但只有當PHP超時時才顯示: 致命錯誤:超過60秒的最大執行時間

初始數組($ tree)有142個元素,所以執行過長用於Web應用程序。 完成數組時,函數似乎永不停止。 如果你能幫助我使用這個功能。謝謝你在前進

回答

0

我,這將是對你有幫助的功能希望

function create_array($number, $data) { 
    global $aFinal; 

    $result = array(); 
// fPrintR($data); 
    foreach ($data as $row) { 
     if ($row['ParentID'] == $number) { 
      $result["put the value you want to show in the tree"] = create_array($row['SubID'], $data); 
     } 
    } 
    return $result; //$result; 
} 

下面的函數是將你從數據庫獲取數據,則返回一個數組

$aAdmnTrees = fGetSubscribers(); 

這裏調用create_array函數並傳遞數據數組

$aOppsArray = create_array(here you have to put ID of super Parent, $aAdmnTrees); 

這個功能是顯示樹的HTML

function recArray($aOppsArray) { 
     ?> 
     <ul> 
      <?php 
      foreach ($aOppsArray as $data => $value) { 
       if (!empty($data)) { 
        ?> 
        <ul style="list-style-type: none; background-color: #336699; padding: 10px; width: 300px;"> 
         <li style=" color: #FFFFFF;"><?php echo $data; ?></li> 
        </ul> 
        <?php 
       } 
       if (is_array($value)) { 
        recArray($value); 
       } else { 
        echo $value . " "; 
       } 
      } 
      ?> 
     </ul> 
     <?php 
    } 

呼叫到上最後一個函數

recArray($aOppsArray); 
+0

確實感謝這個功能幫助我!看起來相似。 Thks – Ted 2014-10-29 15:30:02

+0

如果這個功能對你有幫助,然後投票給我。 – 2014-10-30 07:16:02