ホームページ > バックエンド開発 > PHPチュートリアル > 再帰的なコードを非再帰的な形式に変更してください。

再帰的なコードを非再帰的な形式に変更してください。

WBOY
リリース: 2016-06-13 11:59:25
オリジナル
816 人が閲覧しました

再帰的なコードを非再帰的な形式に変更してください

<br />function delRecursive($id,$class_arr)<br />{<br />	if($id=="") $id=0;<br />	for($i=0;$i<count($class_arr);$i++){<br />		if($class_arr[$i][3]==$id){<br />		    $subid=$class_arr[$i][0];<br />		    $this->db->delete('tree', array('id' => $id));<br />		    $this->db->delete('tree', array('id' => $subid));		<br />			delRecursive($subid,$class_arr);<br />		}	<br />	}<br />}<br />
ログイン後にコピー

-----解決策------ --
なぜ他人にとっても自分にとっても都合が良いという原則を知らないのですか?

再帰を排除するには、システムのスタックの代わりに独自のスタックを使用します
$ar = array(<br />  array(  "1", "0", "顶级分类1",     "0", "1"),<br />  array("713", "0", "顶级分类2",     "0", "1"),<br />  array("716", "0", "一级子分类1", "713", "1"),<br />  array("718", "0", "顶级分类3",     "0", "1"),<br />  array("721", "0", "二级子分类1", "716", "1"),<br />);<br /><br />$id = 713;<br />delRecursive($id, $ar);<br />func($id, $ar);<br /><br />function func($id, $class_arr)<br />{<br />    if($id=="") $id=0;<br />    $st = array($id);<br />    do {<br />      $cnt = count($st);<br />      for($i=0;$i<count($class_arr);$i++){<br />        if(in_array($id = $class_arr[$i][3], $st)){<br />            $subid=$class_arr[$i][0];<br />            if(! in_array($subid, $st)) {<br />              $st[] = $subid;<br />echo "$id,$subid\n";   <br />//            $this->db->delete('tree', array('id' => $id));<br />//            $this->db->delete('tree', array('id' => $subid));    <br />//            delRecursive($subid,$class_arr);<br />            }<br />        }   <br />      }<br />    }while($cnt < count($st));<br />}<br /><br />function delRecursive($id, $class_arr)<br />{<br />    if($id=="") $id=0;<br />    for($i=0;$i<count($class_arr);$i++){<br />        if($class_arr[$i][3]==$id){<br />            $subid=$class_arr[$i][0];<br />//            $this->db->delete('tree', array('id' => $id));<br />//            $this->db->delete('tree', array('id' => $subid));    <br />echo "$id,$subid\n";   <br />            delRecursive($subid,$class_arr);<br />        }   <br />    }<br />}
ログイン後にコピー

------解決策------ -----

<br>$st = array($id);<br>do {<br> =0;$i<count></count> [0];<br> If(!in_array($subid, $st)) {<br> $st[] = > $this->DB_MT->delete('tree ', array ('id' => $id));<br> <br> } <br> }<br>}while($cnt < count($st));<br><br>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート