Đệ quy menu đa cấp trong PHP

Vừa qua mình có nhận được câu hỏi của 1 bạn là làm sao có thể đổ được menu theo đệ quy. Mình thấy cũng hay hay với nhiều bạn đang gặp phải chưa biết đổ menu sử dụng đệ quy thế nào. Bài viết này mình chia sẻ code menu đệ quy để bạn tham khảo. À mình sẽ không giải thích lý thuyết đệ quy mà chia chia sẻ đoạn code 1 menu đệ quy nó thế nào thôi nhé. Nên bạn đọc không hiểu đoạn nào hãy bình luận để mình hướng dẫn.

de quy trong php

Code đệ quy menu đa cấp trong PHP chi tiết

Nếu bạn hiểu đúng bản chất của đệ quy là gọi lần lượt và đi sâu vào từng nhanh con của nó và lặp lại tuần tự thì việc đổ menu không hề khó khăn mình làm qua từng bước sau nhé.

Bước 1: Chuẩn bị dữ liệu mẫu. Dưới đây mình fix 1 đoạn data demo thôi nhé. Còn bạn thì get data từ trong Database ra nhé. Mẫu data của mình như sau

$data = array(
    array(
    	'id' => 1,
    	'name' => 'Thể thao',
    	'slug' => 'the-thao',
    	'parent_id' => 0
    ),
     array(
    	'id' => 2,
    	'name' => 'Du lịch',
    	'slug' => 'du-lich',
    	'parent_id' => 0
    ),
      array(
    	'id' => 3,
    	'name' => 'Kinh tế',
    	'slug' => 'kinh-te',
    	'parent_id' => 0
    ),
       array(
    	'id' => 4,
    	'name' => 'Thể thao trong nước',
    	'slug' => 'the-thao-trong-nuoc',
    	'parent_id' => 1
    ),
      array(
    	'id' => 5,
    	'name' => 'Thể thao quốc tế',
    	'slug' => 'the-thao-quoc-te',
    	'parent_id' => 1
    ),
      array(
    	'id' => 7,
    	'name' => 'Thể thao quốc tế Mỹ',
    	'slug' => 'the-thao-quoc-te-my',
    	'parent_id' => 5
    ),
       array(
    	'id' => 6,
    	'name' => 'Du lịch trong nước',
    	'slug' => 'du-lich-trong-nuoc',
    	'parent_id' => 2
    )
);

Bước 2: Mẫu HTML hiển thị menu. Giả sử menu mình muốn hiển thị theo đoạn code này.

 <div class="menu">
        	 <ul>
        	 	<li>
        	 		<a href="">Thể thao</a>
        	 		<ul class="sub-menu">
        	 			<li><a href="">Thể thao trong nước</a></li>
        	 			<li><a href="">Thể thao ngoài nước</a></li>
        	 		</ul>
        	 	</li>
        	 	<li><a href="">Du lịch</a></li>
        	 	<li><a href="">Kinh tế</a></li>
        	 </ul>
        </div>

Bước 3: Viết hàm đệ quy để đổ menu. Bạn lưu ý cứ sub menu chỗ nào thì bạn gọi lại hàm đệ quy tại đó

function recursiveMenu($data, $parent_id=0, $sub=true){
	echo $sub ? '<ul>': '<ul class="sub-menu">';
    foreach ($data as $key => $item) {
     	 if($item['parent_id'] == $parent_id){
     	 	unset($data[$key]);
     	  ?>    
     <li>
      <a href="<?php echo $item['slug']?>"><?php echo $item['name']?></a>
     
      <?php recursiveMenu($data, $item['id'], false); ?>
     </li>
     	<?php }} 
     echo "</ul>";
}

Bước 4: Gọi hàm và hiển thị menu

<div class="menu">
<?php recursiveMenu($data)?>
</div>

Toàn bộ code

<?php
$data = array(
    array(
    	'id' => 1,
    	'name' => 'Thể thao',
    	'slug' => 'the-thao',
    	'parent_id' => 0
    ),
     array(
    	'id' => 2,
    	'name' => 'Du lịch',
    	'slug' => 'du-lich',
    	'parent_id' => 0
    ),
      array(
    	'id' => 3,
    	'name' => 'Kinh tế',
    	'slug' => 'kinh-te',
    	'parent_id' => 0
    ),
       array(
    	'id' => 4,
    	'name' => 'Thể thao trong nước',
    	'slug' => 'the-thao-trong-nuoc',
    	'parent_id' => 1
    ),
      array(
    	'id' => 5,
    	'name' => 'Thể thao quốc tế',
    	'slug' => 'the-thao-quoc-te',
    	'parent_id' => 1
    ),
      array(
    	'id' => 7,
    	'name' => 'Thể thao quốc tế Mỹ',
    	'slug' => 'the-thao-quoc-te-my',
    	'parent_id' => 5
    ),
       array(
    	'id' => 6,
    	'name' => 'Du lịch trong nước',
    	'slug' => 'du-lich-trong-nuoc',
    	'parent_id' => 2
    )
);

function recursiveMenu($data, $parent_id=0, $sub=true){
	echo $sub ? '<ul>': '<ul class="sub-menu">';
    foreach ($data as $key => $item) {
     	 if($item['parent_id'] == $parent_id){
     	 	unset($data[$key]);
     	  ?>    
     <li>
      <a href="<?php echo $item['slug']?>"><?php echo $item['name']?></a>
     
      <?php recursiveMenu($data, $item['id'], false); ?>
     </li>
     	<?php }} 
     echo "</ul>";
}
<?>
<div class="menu">
<?php recursiveMenu($data)?>
</div>

Như vậy đơn giản chỉ có thế thôi. Mình hy vọng qua đoạn chia sẻ này bạn cũng hiểu về đệ quy một menu ra là như thế nào. Cảm ơn bạn đã theo dõi và ủng bài viết thủ thuật website tại blog của mình

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *