Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用两个相同的递归来做两件不同的事情_Php_Jquery_Html_Recursion - Fatal编程技术网

Php 使用两个相同的递归来做两件不同的事情

Php 使用两个相同的递归来做两件不同的事情,php,jquery,html,recursion,Php,Jquery,Html,Recursion,我试图用JQuery展开和折叠来显示树数据 For example my database Parent A has AA, AB, AC children Parent AA has AAA, AAB, AAC Parent AC has ACA, ACB, ACD etc. 所以我使用递归来显示数据库中的所有数据 但是我还需要声明JQuery,所以我使用相同的递归代码来生成脚本 我想问的是,有没有办法一次使用递归来生成这两个东西?数据显示在标记中,JQuery声明在标记中 因为我觉得做两

我试图用
JQuery
展开和折叠来显示
数据

For example my database 
Parent A has AA, AB, AC children
Parent AA has AAA, AAB, AAC
Parent AC has ACA, ACB, ACD
etc.
所以我使用递归来显示数据库中的所有数据

但是我还需要声明JQuery,所以我使用相同的
递归
代码来生成脚本

我想问的是,有没有办法一次使用递归来生成这两个东西?数据显示在
标记中,JQuery声明在
标记中

因为我觉得做两次同样的事情会浪费记忆

这是我的
代码

   <?   
      $temp = "";                
      $parent = "";
      $level = 0;
      loadFolders($parent, $level, $temp);

      function loadFolders($parent, $level, $temp){
        $getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
        $level++;
        while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
          $parentID = $getLevelSqlRow['id'];
          $child = $getLevelSqlRow['child'];
          $checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
          if (mysql_num_rows($checkChild)){
          ?>
            <div class="level1 redFont" id="levelID<?echo $getLevelSqlRow['id'];?>">
              <?echo "$child";?>
            </div>  
            <div class="level2" id="childID<?echo $getLevelSqlRow['id'];?>">
          <?
            loadFolders($parentID, $level, $temp);
          ?>
            </div>
          <?  
          } else {
          ?>
            <div><?echo "$child";?></div>  
          <?
          }
        }
      }
    ?>
<script> 
    $(document).ready(function(){

    <?
      include "config.php";
      $temp = "";                
      $parent = "";
      $level = 0;
      loadFolder($parent, $level, $temp);

      function loadFolder($parent, $level, $temp){
        $getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
        $level++;
        while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
          $parentID = $getLevelSqlRow['id'];
          $child = $getLevelSqlRow['child'];
          $checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
          if (mysql_num_rows($checkChild)){
          ?>
            $("#levelID<?echo $getLevelSqlRow['id'];?>").click(function(){
            $("#childID<?echo $getLevelSqlRow['id'];?>").slideToggle("slow");
          });
          <?
            loadFolder($parentID, $level, $temp);
          ?>
          <?  
          }
        }
      }
    ?>

    });
  </script>

我没有测试过这个,因为我没有数据,但基本上您只需要在jquery代码中使用选择器,从任何单击点查找子部分

我将嵌套child元素以使其更容易。大概是这样的:

   <?   
  $temp = "";                
  $parent = "";
  $level = 0;
  loadFolders($parent, $level, $temp);

  function loadFolders($parent, $level, $temp){
    $getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
    $level++;
    while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
      $parentID = $getLevelSqlRow['id'];
      $child = $getLevelSqlRow['child'];
      $checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
      if (mysql_num_rows($checkChild)){
        // ** notice I've added item class and nested the children inside
      ?>
        <div class="level1 redFont item" id="levelID<?echo $getLevelSqlRow['id'];?>">
          <?echo "$child";?>
          <div class="children" id="childID<?echo $getLevelSqlRow['id'];?>">
        </div>  

      <?
        loadFolders($parentID, $level, $temp);
      ?>
        </div>
      <?  
      } else {
      ?>
        <div><?echo "$child";?></div>  
      <?
      }
    }
  }
?>
$(document).ready(function(){

    $('div.item').click(function(){
        $(this).find('>div.children').slideToggle("slow");
    });

});

不需要循环两次并生成100个处理程序。

这是一个非常复杂的方法。@Ben Yeah,或者这是唯一的方法吗?我只想节省内存消耗。谢谢你的回答。但它最终将扩展所有带有子类的
标记。我有很多数据,所有数据都有不同的含义levels@Sieryuu
表示直接子项它不起作用,我已更改了类并更改了
JQuery
尝试控制台。在处理程序中记录内容并尝试找出正确的选择器。子项不是
父项
标记的
子项
标记。它就在
parent
标记的下方。例如,parentchild。什么“>”是亲子仪式?