关于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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值