再帰なしで 3 レベルの分類を実現する方法 (テスト コードを添付) 解決策
この投稿は、anydy2008 によって 2013-01-06 12:07:44 によって最終編集されました。
数日前の投稿を読みました
http://bbs.csdn.net/topics/390331161
その中には、再帰なしで分類を実装する方法について言及した snmr_com さんの熱心な回答もありました。
このロジックに従って、カテゴリをツリー配列構造として実装できるのではないかと考えました。
以下は私が再帰的に生成したコードです:
<br />
<?<br />
$arr = array(<br />
<br />
array('id'=>1,'city_name'=>'中国','rel_id'=>'1','pid'=>0),<br />
array('id'=>2,'city_name'=>'广东','rel_id'=>'1-2','pid'=>1),<br />
array('id'=>3,'city_name'=>'深圳','rel_id'=>'1-2-3','pid'=>2),<br />
array('id'=>4,'city_name'=>'广州','rel_id'=>'1-2-4','pid'=>2)<br />
<br />
);<br />
<br />
function find_subclass( $pid ){<br />
<br />
global $arr;<br />
$__arr = array();<br />
foreach ( $arr as $k=>$v )<br />
{<br />
<br />
if( $v['pid']==$pid )$__arr[] = $v;<br />
<br />
}<br />
return $__arr;<br />
<br />
}<br />
<br />
function tree_subclass($pid=0){<br />
<br />
$__arr = array();<br />
$__arr = find_subclass($pid);<br />
if( !empty($__arr) ){<br />
<br />
foreach ( $__arr as $k=>$v )<br />
{<br />
<br />
$__arr[$k]['subclass'] = tree_subclass($v['id']);<br />
<br />
}<br />
<br />
}<br />
return $__arr;<br />
}<br />
<br />
var_dump(tree_subclass(0));<br />
<br />
?><br />
<br />
ログイン後にコピー
非再帰形式で取得されることが期待される配列構造:
<br>
配列(1) {<br>
[0]=><br>
配列(5) {<br>
["id"]=><br>
int(1)<br>
["都市名"]=><br>
文字列(4) "中国"<br>
["rel_id"]=><br>
文字列(1) "1"<br>
["pid"]=><br>
int(0)<br>
["サブクラス"]=><br>
配列(1) {<br>
[0]=><br>
array(5) {<br>
["id"]=><br>
int(2)<br>
["都市名"]=><br>
string(4) "広東省"<br>
["rel_id"]=><br>
string(3) "1-2"<br>
["pid"]=><br>
int(1)<br>
["サブクラス"]=><br>
配列(2) {<br>
[0]=><br>
配列(5) {<br>
["id"]=><div class="clear"></div>
ログイン後にコピー