2016-10-25 2 views
0

Приложение для построения приложения, которое будет отображать генеалогическое древо из базы данных с использованием функции рекрусирования. Для начала все работает фантастически, но моя функция не зацикливается глубже и петля child их child.Рекурсивная функция Php, не зацикливающаяся глубже

Это мой пример: enter image description here

На изображении выше зацикливание должен также цикл Annie Чайлдс Steve и Rex.

Проверьте мой код:

<?php 
     $categories = $db->query("SELECT * FROM user"); 
     $data = array(); 

     // build menu 
     function buildTree(array $elements, $parentId = 0) { 
      $branch = array(); 

      foreach ($elements as $element) { 

       if ($element['parent'] == $parentId) { 
        $children = buildTree($elements, $element['id']); 
        if ($children) { 
         $element['children'] = $children; 
        } 
        $branch[] = $element; 
       } 
      } 
      return $branch; 
     } 

     // Child recrusive looping 
     function recrusive_child($childs) { 
      if(isset($childs)) { 
       foreach ($childs as $child) { 
        echo "<li><a href='#'>".$child['username']."</a></li>"; 
       } 
      } 
     } 

     while ($result = $categories->fetch_assoc()) { 
      $data[] = $result; 
     } 

     $tree = buildTree($data); 

     ?> 

    <div class="tree"> 
     <ul> 
      <?php foreach ($tree as $item): ?> 
       <?php if($item['parent'] == null): ?> 
        <li><a href=""><?= $item['username'];?></a> 
         <?php if($item['children']): ?> 
          <ul> 
           <?php recrusive_child($item['children']); ?> 
          </ul> 
         <?php endif; ?> 
        </li> 
       <?php endif; ?> 
      <?php endforeach; ?> 
     </ul> 
    </div> 
</div> 
+5

Thats потому что ваш recursive_chi ld действительно не рекурсивный, он никогда не называет себя. – Neat

+0

Справа. Позвольте мне проверить и изменить и сделать recrusive ребенка. – Ivan

+0

Теперь работайте хорошо, но у ребенка проблемы с проблемами не отображаются ниже ребенка. Теперь все внутри! Я должен проверить мои css и html, чтобы увидеть это – Ivan

ответ

1

Вот простой пример, чтобы создать рекурсивные список категорий

<? 
    function buildTree($parent = 0, $treeArray = '') { 

      if (!is_array($treeArray)) 
      $treeArray = array(); 

      $sql = "SELECT `cid`, `name`, `parent` FROM `category` WHERE 1 AND `parent` = $parent ORDER BY cid ASC"; 
      $query = mysql_query($sql); 
      if (mysql_num_rows($query) > 0) { 
      $treeArray[] = "<ul>"; 
      while ($row = mysql_fetch_object($query)) { 
       $treeArray[] = "<li>". $row->name."</li>"; 
       $treeArray = buildTree($row->cid, $user_tree_array); 
      } 
      $treeArray[] = "</ul>"; 
      } 
      return $treeArray; 
     } 
    ?> 
<ul> 
    <?php 
     $returnedData = buildTree(); 
     foreach ($returnedData as $returnedD) { 
     echo $returnedD; 
     } 
?> 
</ul> 
1

Сделать рекурсивный вызов recrusive_child (recursive_child?)

function recrusive_child($childs) { 
      if(isset($childs)) { 
       foreach ($childs as $child) { 
        echo "<li><a href='#'>".$child['username']."</a>"; 
        if ($child['children']){ 
         echo "<ul>"; 
         recrusive_child($child['children']); 
         echo "</ul>"; 
        } 
        echo "</li>"; 
       } 
      } 
     } 
Смежные вопросы