搜鞥都哦 发表于 2017-4-10 11:01:45

关于PHP中数组递归遍历的一些见解

  

  接触PHP不久,今天编写数组递归遍历的时候发现一些比较有趣的东西,分享下吧。
  

  首先上代码:
  首先定义了一个多个层级的数组,其中我们可以分类下:
  1、首先是有键值对的数组;
  2、其中部分只有值没有键;

$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"
)
);


接下来我们来把这个数组打印到页面上来试试,编写递归函数:
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>";
next ( $array ); // 给key赋值后需要移动到下一个,key才会更新
}
}
}
  接下来在后面通过下面的代码调用执行:

RecursiveArr ( '-', $arr );出现下面图中的结果:

  

  从上面的运行结果图可以看出,发现有些键是重复的,这个是为什么呢?为了更好的比对区别和联系,接下来再看段代码:

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>";
}
next ( $array ); // 给key赋值后需要移动到下一个,key才会更新
}
}如果我把之前的递归函数改成上面的code,运行结果图如下:
  从上面的两种结果图应该可以看出一些端倪的吧。
  

  如果把next()函数使用在foreach中的if-else代码段中,则不同层级的顺序是可以记录和遵循的;但如果把next()函数使用在foreach中的if-else代码段外的话,则顺序就是不区分层级直接递增的。因此如果在以后的开发中,如果需要针对键值进行处理的时候,就需要格外的注意此处的变化,否则可能会让你调试半天都不知道为何?
  

  转载请注明: 来自Billy.leehttp://blog.csdn.net/qq415734794/article/details/7655198
页: [1]
查看完整版本: 关于PHP中数组递归遍历的一些见解