phpでツリー表示
表題の通り、phpをもちいてツリー表示をしたいと思っています。
そこで、下記のコードの実行結果は以下の通りなのですが、
【このように実行結果を変えたい】のように表示したいと考えています。
どのようにコードを書きかえれば、実行できるでしょうか?
【コード】
<?php
function put_tree($no, $line, $broths, $childs, $texts) {
echo '<span class="line">' . $line . '</span>';
echo '▼[' . $no . ']' . $texts[$no] . '<br>';
$line = preg_replace('/├$/', '│', $line);
$line = preg_replace('/└$/', ' ', $line);
$no = isset($childs[$no]) ? $childs[$no] : 0;
while ($no > 0) {
$tail = $broths[$no] ? '├' : '└';
put_tree($no, $line . $tail, $broths, $childs, $texts);
$no = $broths[$no];
}
}
?>
<html>
<head>
<title>ツリー表示</title>
<style>
.line {
font-family: "MS ゴシック", monospace;
}
</style>
</head>
<body>
<?php
$logs = array(
array(1, 0, 'あああああ'), //記事番号・親記事番号・記事内容
array(2, 1, 'いいいいい'),
array(3, 1, 'ううううう'),
array(4, 2, 'えええええ'),
array(5, 3, 'おおおおお'),
array(6, 3, 'かかかかか'),
array(7, 0, 'ききききき'),
array(8, 6, 'くくくくく'),
array(9, 8, 'けけけけけ'),
array(10, 7, 'こここここ')
);
$roots = array();
$broths = array();
$childs = array();
$texts = array();
foreach ($logs as $log) {
list($no, $pno, $text) = $log;
if ($pno == 0) {
$roots[] = $no;
} else {
$broths[$no] = isset($childs[$pno]) ? $childs[$pno] : 0;
$childs[$pno] = $no;
}
$texts[$no] = $text;
}
rsort($roots);
foreach ($roots as $root) {
put_tree($root, '', $broths, $childs, $texts);
}
?>
</body>
</html>
【実行結果】
▼[7]ききききき
└▼[10]こここここ
▼[1]あああああ
├▼[3]ううううう
│├▼[6]かかかかか
││└▼[8]くくくくく
││ └▼[9]けけけけけ
│└▼[5]おおおおお
└▼[2]いいいいい
└▼[4]えええええ
【このように実行結果を変えたい】
▼[1]あああああ
├▼[3]ううううう
│├▼[6]かかかかか
││└▼[8]くくくくく
││ └▼[9]けけけけけ
│└▼[5]おおおおお
└▼[2]いいいいい
└▼[4]えええええ
▼[7]ききききき
└▼[10]こここここ
お礼
早速のお返事、本当にありがとうございました。 なるほど。 分かりました! ありがとうございました。