Как посчитать результат по номеру уровня, который будет помещен в древовидную структуру? - PullRequest
1 голос
/ 04 ноября 2019

У меня есть вопрос, чтобы посчитать каждый уровень дерева. Например, я являюсь первой строкой в ​​древовидной структуре, так что я являюсь уровнем 1, тогда как мой нисходящий уровень - уровень 2 стенда, нисходящий контур моего нисходящего уровня - уровень 3 стенда и так далее. Мой вопрос состоит в том, как принять каждое изменение номера уровня в качестве слова, введенного в мое древовидное представление.

Ниже приведена моя кодировка:

    <?php


  $sql_select = 'SELECT * FROM users WHERE id = ' . $user_id;
  $query_select = db_conn_select($sql_select);
  $i=1;
  $level= 'Level';
  foreach ($query_select as $rs_select) {
 $email2 = $rs_select['email'];
 $name2 = $rs_select['name'];
    }

 $lang = $_COOKIE["Language"];

   require_once("language/lang_team_" . $lang . ".php");
  ?>




   <!-- Level tree -->
    <div class="row">               
   <!-- block -->
      <div class="col-lg-12">
    <div class="box">
    <header>
        <h5><?php echo $language["LIST_TITLE"]; ?>:</h5>
        <!-- .toolbar -->
        <!--div class="toolbar">
            <nav style="padding: 8px;">
                <a href="javascript:;" class="btn btn-default btn-xs collapse-box">
                    <i class="fa fa-minus"></i>
                </a>
            </nav>
        </div--><!-- /.toolbar -->
    </header><br><br>
     <div class="block">

      <div class="block-content collapse in">
    <div class="span6"> 
        <?php
        $sql = "select * from level_tree lt JOIN users u ON lt.user_id = u.id where lt.referal_id =" . $user_id . ' and lt.level=1';
        $query = mysql_query($sql);
        if (mysql_num_rows($query) > 0) {
            $select_name = 'SELECT * FROM users WHERE id = ' . $user_id;
            $query_select = db_conn_select($select_name);
            foreach ($query_select as $rs_select) {
                $name = $rs_select['name'];
                $email = $rs_select['email'];
                $email_arr = explode('@', $rs_select['email']);
                $email_length = strlen($email_arr[0]);
                $email_first = substr($email_arr[0], 0, 1);
                $email_last = substr($email_arr[0], -1, 1);
            }
            $email_address = '';
            for ($i = 0; $i < $email_length; $i++) {
                if ($i == 0) {
                    $email_address.=$email_first;
                } elseif ($i == $email_length - 1) {
                    $email_address.=$email_last;
                } else {
                    $email_address.='*';
                }
            }
            $email_user = $email_address . '@' . $email_arr[1];


            ?>          
            <div id="jstree"  style="font-size:15px;">
                <ul>
                    <li><b><?php echo "<b>&nbsp;&nbsp;&nbsp;".$level." ".$i.": &nbsp;".$name2."&nbsp;(".$email2.")"; ?></b></li>

                    <ul>
                        <?php
                        while ($rs = mysql_fetch_array($query)) {
                            $email_address = '';
                            $email_arr = explode('@', $rs['email']);
                            $email_length = strlen($email_arr[0]);
                            $email_first = substr($email_arr[0], 0, 1);
                            $email_last = substr($email_arr[0], -1, 1);
                            for ($i = 0; $i < $email_length; $i++) {
                                if ($i == 0) {
                                    $email_address.=$email_first;
                                } elseif ($i == $email_length - 1) {
                                    $email_address.=$email_last;
                                } else {
                                    $email_address.='*';
                                }
                            }
                            $email_user = $email_address . '@' . $email_arr[1];
                            echo "<li><b><img src='images/down_right_arrow.png' />".$level."&nbsp".$i.":&nbsp;".$rs['name']."&nbsp;(".$email_user.")";
                           // echo "<li><b>" . $email_user . "";
                            downline_list($rs['id']);
                            echo "</b></li>";
                        }
                        ?>
                        </div>
                        <?php
                    } else {
                       // echo $email2;
                        //echo "<b>&nbsp;&nbsp;&nbsp;".$name2."&nbsp;(".$email2.")";
                         echo '<div style="font-size:15px;color:black;font-weight:bold;"><img src="images/down_right_arrow.png /><span style="font-size:15px;color:black;font-weight:bold;">&nbsp;&nbsp;&nbsp;'.$name2.'&nbsp;('.$email2.')</span></div>';
                              echo "<br />";

                    }

                    function downline_list($id) {
                        $sql = "select lt.user_id,lt.referal_id,lt.`level`,u.email,u.name from level_tree lt JOIN users u ON lt.user_id = u.id where lt.referal_id =" . $id . " and u.is_active=1 and lt.level=1";
                        $query = mysql_query($sql);
                        if (mysql_num_rows($query)) {
                            echo "<ul>";
                            while ($rs = mysql_fetch_array($query)) {
                                $email_address = '';
                                $email_arr = explode('@', $rs['email']);
                                $email_length = strlen($email_arr[0]);
                                $email_first = substr($email_arr[0], 0, 1);
                                $email_last = substr($email_arr[0], -1, 1);
                                $level = 'Level';
                                for ($i = 0; $i < $email_length; $i++) {
                                    if ($i == 0) {
                                        $email_address.=$email_first;
                                    } elseif ($i == $email_length - 1) {
                                        $email_address.=$email_last;
                                    } else {
                                        $email_address.='*';
                                    }
                                }
                                $email_user = $email_address . '@' . $email_arr[1];
                        echo "<li><b><img src='images/down_right_arrow.png' />".$level."&nbsp;".$i.":&nbsp; ".$rs['name']."&nbsp;(".$email_user.")";
                               // echo "<li><b>" . $email_user;     
                                downline_list($rs['user_id']);
                                echo "</b></li>";
                            }
                            echo "</ul>";
                        }
                        $i++;
                    }
                    ?>               
                </ul></div>
    </div>
</div>
</div>
</div>
<!-- /block -->
 </div>

 <script src="plugins/jstree/dist/jquery-1.10.2.min.js"></script>
 <link rel="stylesheet" href="plugins/jstree/dist/themes/default/style.min.css" />
 <script src="plugins/jstree/dist/jstree.min.js"></script>
  <script>
 $(function() {
    // 6 create an instance when the DOM is ready
    $('#jstree').bind("ready.jstree", function() {
        $('#jstree').jstree('open_all');
    }).jstree();

  });
   </script>
  <style type="text/css">
  .jstree li > a > .jstree-icon {  display:none !important; } 
   </style> 

Мой вывод показан ниже под изображением, он может отображать числокак слово, но число неправильное, чтобы получить на каждом уровне:

Level Screenshot 1

На самом деле я хочу получить результат, как показано на рисунке ниже, уровень числа будет рассчитываться в соответствии суровень:

Level Screenshot 2

Я застрял в этом вопросе несколько дней, надеюсь, кто-то может помочь мне решить большую проблему. Спасибо.

1 Ответ

0 голосов
/ 04 ноября 2019

Ваш код предназначен для исследования дерева в режиме поиска в глубину (DFS) и определения уровня каждого узла в таком поиске (конечно, с другим подходом вы можете сделать это также в режиме поиска в ширину),Поэтому вы должны рекурсивно вызвать функцию downline_list и отправить уровень текущего узла в качестве параметра. В основном, пока вы находитесь на первом уровне, и при рекурсивном вызове функции уровень увеличивается на единицу при каждом рекурсивном вызове. Когда вы исследуете уровень $ level своего дерева и вызываете функцию downline_list , чтобы найти дочерние элементы текущего узла, прямые дочерние элементы будут в $ level +1 и так далее. Итак, у вас есть что-то вроде этого:

   /// Main while loop 
   while ($rs = mysql_fetch_array($query)) {
      // ...
      downline_list($rs['id'], 1);
      // ...
   }

   function downline_list($id, $level)
   {    
      //...    
      //Nodes here are in level $level
      //but the children of this node would be in level $level + 1  
      downline_list($rs['user_id'], $level + 1);
      //...
   }
...