Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiển thị menu cây của cha mẹ đã chọn

Tôi thấy một vấn đề với giải pháp của bạn. Khi bạn kiểm tra ID if($id == $record->id) bạn sẽ chỉ phù hợp với cấp độ hiện tại trong cây. tức là chọn Dell với id =2 sẽ không khớp với lần lặp đầu tiên, vì vậy hàm của bạn sẽ không chuyển sang cấp độ tiếp theo.

Bạn cần theo dõi đường dẫn đến menu đã chọn của mình.

Trong trường hợp của bạn. Khi bạn chọn Dell, bạn sẽ chỉ thấy "Máy tính", tôi có đúng không?

Làm thế nào về một cái gì đó như thế này:

...
  function rederTreeById($records, $path) {
        echo '<ul>';
        foreach($records as $record) {
                if(in_array($record->id, $path)) {
                        echo '<li>'.$record->title;
                        if(!empty($record->childs)) {
                                rederTreeById($record->childs, $path);
                        }
                        echo '</li>';
                } else {
                        echo '<li>'.$record->title.'</li>';
                }
        }
        echo '</ul>';
 }

 function getPath($id) {
    $path = array();
    $current=$id;
    $path[] = 1
    while(!is_null($categories[$current]->parent_id)) {
        $current=$categories[$current]->parent_id
        $path[] = $current;
    }
    return $path;
 }


$selectedId = 1;


 rederTreeById($rootCategories, getPath($selectedId));
...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ý nghĩa về hiệu suất của việc cho phép sử dụng bí danh trong mệnh đề HAVING

  2. MySQL &NHibernate. Cách khắc phục lỗi:Cột 'ReservedWord' không thuộc bảng ReservedWords?

  3. Cách xem truy vấn đầy đủ từ DANH SÁCH TIẾN TRÌNH

  4. PHP - MySQL nhận giá trị của tham số từ một thủ tục được lưu trữ

  5. Làm tròn ngày giờ MYSQL thành khoảng thời gian sớm nhất 15 phút tính bằng mili giây (PHP)