>백엔드 개발 >PHP 튜토리얼 >递归函数里有foreach数组的时候,数组是如何被遍历的?

递归函数里有foreach数组的时候,数组是如何被遍历的?

WBOY
WBOY원래의
2016-06-13 12:03:431147검색

递归函数里有foreach数组的时候,数组是怎么被遍历的??
$arr = Array(Array('a1','a2'),Array('b1','b2'),Array('c1','c2'));
function tree($a){
    foreach($a as $row){

    tree($a);
    }
}
tree($a);
这样的代码,在函数体里面tree($a);递归的时候,它是从数组里第一个元素Array('a1','a2')重新开始遍历吗
当第一层的foreach遍历到第二个元素,又一次tree($a);递归的时候,也是从第一个元素Array('a1','a2')重新开始遍历吗??
------解决方案--------------------
你这个递归都死循环了,会溢出的。。。
------解决方案--------------------

$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 />
a1
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 />

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.