【问题标题】:Php recursive function for treeview树视图的php递归函数
【发布时间】:2014-12-25 05:38:50
【问题描述】:

我有一个具有这种结构的数组 $tree:

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

我尝试制作一个像这样的树视图:

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 应用程序中使用。 完成数组后,函数似乎永远不会停止。 如果你能帮我完成这个功能。提前谢谢你

【问题讨论】:

    标签: php function recursion


    【解决方案1】:

    我有一个函数希望对你有帮助

    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);
    

    【讨论】:

    • 确实感谢这个功能帮助我!看起来很相似。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多