PHP中使用遞迴函式
阿新 • • 發佈:2018-12-24
下面是使用遞迴函式的一個小例子。
目的是根據parent_id和task_id對task進行分類。
具體實現:
<?php
//連線資料庫,使用前幾天建立的資料庫連線檔案進行連線,如果沒有這個檔案可以去我的部落格裡找一下
require_once('./db.php');
$connect = DB::getInstance()->connect();
$sql = 'select task_id, parent_id, task from t_task order by parent_id asc';
$res = $connect->query($sql);
//這裡設定一個數據,用來存放task下是否有別的task
$tasks = array();
//下面就來存放,一看就懂
while(list($task_id, $parent_id, $task) = $res->fetch()) {
$tasks[$parent_id][$task_id] = $task;
}
//可以輸出一下tasks看看是什麼樣的,見圖1-1,可以看出它其實就是將每一個task根絕parent_id分成了不同的組
//定義遞迴函式
function make_list($parent) {
global $tasks;//引入$tasks
echo '<ol>';
foreach($parent as $task_id => $todo) {
//將$parent中的陣列進行迴圈
echo '<li>'.$todo;
//如果$tasks中有task_id的話,代表這個task_id的task是有子task的,也就是有task的task_id的parent_id是這個task_id,說的可能有點複雜,其實仔細想一想還是很簡單的,就是判斷是否有子task
//如果有的話就把這個task_id當做值再次傳入make_list(),然後查詢它有沒有子task
if(isset($tasks[$task_id ])) {
make_list($tasks[$task_id]);
}
echo '</li>';
}
echo '</ol>';
}
?>
圖1-1
最終輸出結果: