有关PHP数组递归遍历的一点理解

发布时间:2020-11-10编辑:脚本学堂
有关PHP数组递归遍历的一点理解。首先,定义一个多个层级的数组。1、首先是有键值对的数组;2、其中部分只有值没有键;

首先,定义一个多个层级的数组。

1、首先是有键值对的数组;
2、其中部分只有值没有键;
 

复制代码 代码如下:
<?php
/**
  desc:数组
*/
$arr = array ( 
            "1" => 'test', 
            '2' => 'me', 
            array ( 
                    "3" => "beij", 
                    "4" => "zz"  
            ), 
            "45", 
            array ( 
                    "5" => "5", 
                    "6" => "ewrwer", 
                    "7" => "ssss", 
                    array ( 
                            "8" => "ssd", 
                            "9" => "bdex"  
                    ), 
                    "10", 
                    "11"  
            )  
    ); 
?>
 

接下来,编写递归函数打印这个数组:
 

复制代码 代码如下:
<?php
/**
  desc:递归遍历数组
  link:www.jb200.com
  date:2013/2/22
*/
function RecursiveArr($patten, $array) { 
        foreach ( $array as $value ) { 
            if (is_array ( $value )) { 
                $patten = $patten . $patten; 
                RecursiveArr ( $patten, $value ); 
            } else { 
                echo "<p>" . $patten . "【" . key ( $array ) . "】" . ": " . $value . " <br/> " . "</p>"; 
                <span style="color:#ff0000;"><strong>next ( $array ); // 给key赋值后需要移动到下一个,key才会更新</strong></span> 
            } 
        } 
    } 
?>


调用示例:
 

复制代码 代码如下:
RecursiveArr ( '-', $arr ); 

出现下面图中的结果:
arr1.jpg
从上面的运行结果图可以看出,发现有些键是重复的。
为了比对区别和联系,接下来再看段代码:
 

复制代码 代码如下:
<?php
/**
  desc:递归遍历数组
  link:www.jb200.com
  date:2013/2/22
*/
function RecursiveArr($patten, $array) { 
    foreach ( $array as $value ) { 
            if (is_array ( $value )) { 
                $patten = $patten . $patten; 
                RecursiveArr ( $patten, $value ); 
            } else { 
                echo "<p>" . $patten . "【" . key ( $array ) . "】" . ": " . $value . " <br/> " . "</p>";            
            } 
            <span style="color:#ff0000;"><strong>next ( $array ); // 给key赋值后需要移动到下一个,key才会更新</strong></span> 
        } 
    } 

如果我把之前的递归函数改成上面的code,运行结果图如下:
arr2.jpg

从上面的两种结果图应该可以看出一些什么了吧,亲。

说明:
若把next()函数使用在foreach中的if-else代码段中,则不同层级的顺序是可以记录和遵循的;
但如果把next()函数使用在foreach中的if-else代码段外的话,则顺序就是不区分层级直接递增的。
因此,如果需要针对键值进行处理,则需要格外的注意此处的变化,否则可能会让你像子弹一样飞...哈!