2014-10-29 51 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