実装図
ドロップダウンリストの無限レベル分類
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); function displayCate($pid=0,$selected=1){ $rs=getList($pid); $str=''; $str.="<select name='cate'>"; foreach ($rs as $key=>$val){ $selectedstr=''; if ($val['id'] == $selected){ $selectedstr="selected"; } $str.="<option{$selectedstr}>{$val['catename']}</option>"; } return $str.='</select>'; } echo displayCate(0,2); ?>
以下では、セクションに分けてコードを説明します。
コードの説明:
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); ?>
function getList($pid=0){ } ?>
まず、親クラス ID として pid を 0 として定義して関数を定義します。
$sql="SELECT*FROM deepcate WHERE pid = $pid";
SQL ステートメントを使用して、pid 選択サーフェスのサブクラスをクエリします。
$res = mysql_query($sql); //执行sql语句 $result=array(); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; } return $result;
結果を配列に入れてresultに返します。
再帰は、サブクラスをクエリするときに、関数がそれ自体を呼び出すための手法です。getList($row['id']);を呼び出す必要があります。
サブクラスの ID を次のクラスの ID として使用する必要があります。 $row['id'])を持ってくる
この時のコードは
<?php function getList($pid=0){ $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); $result=array(); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; } return $result; } ?>
再帰演算は配列を返す必要があるので、参照メソッドを使ってコードを変更します
<?php include ("conn.php"); function getList($pid=0,&$result=array()){ $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $result[]=$row; getList($row['id'],$result); } return $result; } ?>
それでは分類のスタイルを美化していきます
<?php include ("conn.php"); function getList($pid=0,&$result=array(),$space=0){ $space=$space+2; $sql="SELECT*FROM deepcate WHERE pid = $pid"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)){ $row['catename']=str_repeat(' ',$space).'|--|'.$row['catename']; $result[]=$row; getList($row['id'],$result,$space); } return $result; } $rs=getList(); print_r($rs); ?>
プリントアウトして観察してください。
この章の重要なポイント
無限レベル分類の再帰的実装は、再帰を使用して親ノードを見つけて家系図を生成することです。
サブクラスと親クラス。