iT邦幫忙

0

PHP如何將資料庫tree寫出網頁排序

  • 分享至 

  • xImage

我的資料庫結構如下

cid  pid  name
1     0     aa
2     1     bb
3     2     cc
4     1     dd

要如何寫出如下的html

<select name="pid">
<option value="0">----</option>
<option value="1">aa</option>
<option value="2">-bb</option>
<option value="3">---cc</option>
<option value="4">-dd</option>
</select>
lsesroom iT邦新手 3 級 ‧ 2023-11-10 08:37:56 檢舉
一般樹的問題都是用遞迴解決。
黃彥儒 iT邦高手 1 級 ‧ 2023-11-10 08:52:12 檢舉
為什麼CC不是兩個`-`?
greenriver iT邦研究生 5 級 ‧ 2023-11-10 14:01:14 檢舉
關鍵字: php foreach html
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
greenriver
iT邦研究生 5 級 ‧ 2023-11-10 14:08:51

這樣?

<select name="pid">
    <option value="0">----</option>
    <?php foreach($array as $obj){ ?> 
        <option value="<?php echo $obj['pid']; ?>">
            <?php echo $obj['name']; ?>
        </option>
    <?php } ?>
</select>

樓主要的應該是這樣

<select name="pid">
    <option value="0">----</option>
    <?php foreach($array as $obj){ ?> 
        <option value="<?php echo $obj['pid']; ?>">
            <?php for ($pid=$obj['pid']; $pid = 0; $pid--) {
                  echo "-";   }?>
            <?php echo $obj['name']; ?>
        </option>
    <?php } ?>
</select>
0
犬千賀
iT邦新手 3 級 ‧ 2023-11-15 16:35:06

思路很簡單,沿著階層往下找...
先列出第一階層也就是 pid=0 的資料 => cid=1
接著找出 cid=1 底下的分支(pid=1的資料) => cid=2,4
同上再找出 cid=2,4 各自底下的分支(pid=2,4的資料) =>...以此類推,形成遞迴

因此可列出 Recursive function 如下

function _getBranches( $data_arr, $pid=0, $level=0 ){
		
	$level++;
	foreach( $data_arr as $row ){
		if( $row['pid']===$pid ){ // 只列出該父階$pid的資料
			$name = str_repeat('-',$level-1).$row['name']; // 顯示階層
			echo "<option value=".$row['cid'].">$name</option>";
            
            // 再找出底下的分支(pid=$row['cid'] )
			$branches =_getBranches( $data_arr, $row['cid'], $level );
		}
	}
}

####
$data_arr = array(
	['cid'=>1, 'pid'=>0, 'name'=>'aa',],
	['cid'=>2, 'pid'=>1, 'name'=>'bb',],
	['cid'=>3, 'pid'=>2, 'name'=>'cc',],
	['cid'=>4, 'pid'=>1, 'name'=>'dd',],
	// ['cid'=>9, 'pid'=>7, 'name'=>'ff',],
	// ['cid'=>7, 'pid'=>9, 'name'=>'ee',],
);

echo '<select name="cid" >';
echo '<option value="0" >--------</option>';
echo _getBranches( $data_arr );
echo '</select>';

另外,你可以再思考一下怎麼避免 cid=9,7 的狀況...

我要發表回答

立即登入回答