ホームページ > バックエンド開発 > PHPチュートリアル > 再帰関数に foreach 配列がある場合、その配列はどのように走査されるのでしょうか?

再帰関数に foreach 配列がある場合、その配列はどのように走査されるのでしょうか?

WBOY
リリース: 2016-06-13 12:03:43
オリジナル
1147 人が閲覧しました

再帰関数に foreach 配列がある場合、その配列はどのように走査されるのでしょうか? ?
$arr = Array(Array('a1','a2'),Array('b1','b2'),Array('c1','c2'));
関数ツリー($a) ){
foreach($a as $row){

tree($a);
}
}
tree($a);
コードは次のようになります。 Tree($a); が関数本体で再帰的である場合、最初のレベルの foreach が配列の最初の要素 Array('a1', 'a2') から走査を再開しますか? 2 番目の要素、そして Tree($a); が再び再帰的になると、最初の要素 Array('a1', 'a2') から再び走査が開始されますか? ?

------解決策----------------------再帰が無限ループに陥っており、オーバーフローします。の。 。 。

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

$arr = Array(Array('a1','a2'),Array('b1','b2'),Array('c1','c2'));<br />function tree($a){<br />  foreach($a as $row){	<br />    if(is_array($row)) tree($row);<br />    else echo $row . '<br>';<br />  }<br />}<br />tree($arr);<br />
ログイン後にコピー
a2
b1
b2
c1
c2


------解決策---- -再帰には終了条件がなく、無限ループします。
終了条件は、要素が配列でない場合、再帰の必要がないことです。


<br />$arr = Array(Array('a1','a2'),Array('b1','b2'),Array('c1','c2'));<br />function tree($a){<br />    if(is_array($a)){ // 这里判断是否需要再递归<br />        foreach($a as $row){<br />            tree($row);<br />        }<br />    }else{<br />        echo $a.'<br>';<br />    }<br />}<br />tree($arr);<br />
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート