Ngu ngơ học làm web (82) - Kỹ thuật đệ quy 2

Tiếp theo của: Ngu ngơ học làm web (81) - Kỹ thuật đệ quy 1
-----

Phần 82.       Kĩ thuật đệ quy 2


Đây là clip số 90:


Hiển thị menu đa cấp trong selectbox:

[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
  <link rel="stylesheet" href="style.css">
  <script src="js/jquery.js"></script>
</head>
<body>
<?php
  $menu = array();
  $menu[] = array('id' => 1, 'name' => 'Home', 'parent' => 0);
  $menu[] = array('id' => 2, 'name' => 'About', 'parent' => 0);
  $menu[] = array('id' => 3, 'name' => 'News', 'parent' => 0);
  $menu[] = array('id' => 4, 'name' => 'Products', 'parent' => 0);
  $menu[] = array('id' => 5, 'name' => 'Contact', 'parent' => 0);
  $menu[] = array('id' => 6, 'name' => 'Tin trong nước', 'parent' => 3);
  $menu[] = array('id' => 7, 'name' => 'Tin quốc tế', 'parent' => 3);
  $menu[] = array('id' => 8, 'name' => 'Công nghệ', 'parent' => 6);
  $menu[] = array('id' => 9, 'name' => 'Giáo dục', 'parent' => 6);
  $menu[] = array('id' => 10, 'name' => 'Y tế', 'parent' => 6);
  $menu[] = array('id' => 11, 'name' => 'Education', 'parent' => 7);
  $menu[] = array('id' => 12, 'name' => 'Breaking news', 'parent' => 7);
  $menu[] = array('id' => 13, 'name' => 'Software', 'parent' => 4);

  function deQuyLevel($array, $parent, $level, &$newArray) {
    // điều kiện dừng
    if (count($array) > 0) {
      foreach ($array as $key => $value) {
        if ($value['parent'] == $parent) {
          $value['level'] = $level;
          $newArray[] = $value;
          unset($array[$key]);
          $newParent = $value['id'];
          deQuyLevel($array, $newParent, $level + 1, $newArray);
        }
      }
    }
  }
  $menu1 = array();
  deQuyLevel($menu, 0, 1, $menu1);

function createSelectbox ($array, $selected = 0, $name, $style = null, $size = 0) {
  $xhtml = '<select name="'. $name . 'id="' . $name . '" style="' . $style . '" size="' . $size . '">';
  foreach($array as $key => $value) {
      $strSelected = '';
      if ($value['id'] == $selected) {
        $strSelected = 'selected="selected"';
      }
      if ($value['level'] == 1) {
        $xhtml .= '<option value="' . $value['id'] . '"' . $strSelected . '>+' . $value['name'] . '</option>';
      } else {
        $name = str_repeat('&nbsp;', 4 * ($value['level'] - 1)) . '-' . $value['name'];
        $xhtml .= '<option value="' . $value['id'] . '"' . $strSelected . '>' . $name . '</option>';
      }
    }
  $xhtml .= '</select>';
  return $xhtml;
}
  echo createSelectbox($menu1, 1, 'selectbox', 'min-width: 200px; padding: 3px; margin: 10px', 15);
?>
</body>
</html>

Đây là clip số 91:


Tạo menu đa cấp sử dụng ul, li.

Lưu lại mã nguồn để tham khảo.

[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
</head>
<body>
<?php
  $menu = array();
  $menu[] = array('id' => 1, 'name' => 'Home', 'parent' => 0);
  $menu[] = array('id' => 2, 'name' => 'About', 'parent' => 0);
  $menu[] = array('id' => 3, 'name' => 'News', 'parent' => 0);
  $menu[] = array('id' => 4, 'name' => 'Products', 'parent' => 0);
  $menu[] = array('id' => 5, 'name' => 'Contact', 'parent' => 0);
  $menu[] = array('id' => 6, 'name' => 'Tin trong nước', 'parent' => 3);
  $menu[] = array('id' => 7, 'name' => 'Tin quốc tế', 'parent' => 3);
  $menu[] = array('id' => 8, 'name' => 'Công nghệ', 'parent' => 6);
  $menu[] = array('id' => 9, 'name' => 'Giáo dục', 'parent' => 6);
  $menu[] = array('id' => 10, 'name' => 'Y tế', 'parent' => 6);
  $menu[] = array('id' => 11, 'name' => 'Education', 'parent' => 7);
  $menu[] = array('id' => 12, 'name' => 'Breaking news', 'parent' => 7);
  $menu[] = array('id' => 13, 'name' => 'Software', 'parent' => 4);

  function deQuyMenu($array, $parent, &$newString) {
    // điều kiện dừng
    if (count($array) > 0) {
      $newString .= '<ul>';
      foreach ($array as $key => $value) {
        if ($value['parent'] == $parent) {
          $value['name'] = '<a href="targetPage.php?targetID=' . $value['id'] . '">' . $value['name'] . '</a>';
          $newString .= '<li>' . $value['name'];
          unset($array[$key]);
          $newParent = $value['id'];
          deQuyMenu($array, $newParent, $newString);
          $newString .= '</li>';
        }
      }
      $newString .= '</ul>';
    }
  }
  deQuyMenu($menu, 0, $newString);
  $newString = str_replace('<ul></ul>', '', $newString);
  echo $newString;
?>
</body>
</html>

Đây là clip số 92:

Hiển thị nội dung thư mục bằng hàm đệ quy.


[index.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>PHP</title>
</head>
<body>
<?php
  function showAll($path, &$newString){
    $data = scandir($path);
    $newString .= '<ul>';
    foreach ($data as $key => $value) {
      if ($value != '.' && $value != '..') {
        $dir = $path . '/' . $value;
        if (is_dir($dir)) {
          $newString .= '<li>'. 'D: ' . $value;
          showAll($dir, $newString);
          $newString .= '</li>';
        } else {
          $newString .= '<li>' . 'F: ' . $value . '</li>';     
        }
      }
    }
    $newString .= '</ul>';
  }
  showAll('.', $newString);
  echo $newString;
?>
</body>

</html>
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm: