php的递归问题,$arr[$key]=doub($arr[$key])这句看了半天没看懂。下面是代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的递归问题,$arr[$key]=doub($arr[$key])这句看了半天没看懂。下面是代码相关的知识,希望对你有一定的参考价值。
<?php
// 一个多维数组,如果单元值为数字,则把其值修改为2倍
// 如array(1,2,'b',array(3,'c',array(4,5)))
$arr = array(1,2,'b',array(3,'c',array(4,5)));
function doub($arr)
foreach ($arr as $key => $v)
if (is_array($v))
$arr[$key]=doub($arr[$key]);
if (is_numeric($v))
$arr[$key]=$arr[$key]*2;
return $arr;
print_r(doub($arr))
?>
就拿$arr = array(1,2,'b',array(3,'c',array(4,5)));为例,给你逆推一下。
假设$arr = array(4,5);
$arr = doub($arr);实际就是$arr = doub(array(4,5));
doub(array(4,5)会返回array(8,10)这个应该没问题吧,很基础的了。
最后再赋值给$arr,那么$arr = array(8,10);
假设$arr = array(3,'c',array(4,5)));
因为$arr[2]=array(4,5);是个数组所以会去$arr[$key]=doub($arr[$key]);
其实实际就是$arr[2]=doub($arr[2]);再转一下不就是$arr[2]=doub(array(4,5));
看前一个假设,那现在是不是就可以转成$arr[2]=array(8,10);
所以最后的返回其实就是array(6,'c',array(8,10));
最后就是$arr = array(1,2,'b',array(3,'c',array(4,5)));
推演过程,参照上例
$arr[3]=array(3,'c',array(4,5));
$arr[$key]=doub($arr[$key]);
$arr[3]=doub(array(3,'c',array(4,5)));
$arr[3]=array(6,'c',array(8,10));
array(2,4,'b',array(6,'c',array(8,10)));
如果$arr更加复杂,其实无非就是以上过程不断重复重复再重复
哎,难得有此兴致,吾已尽力,不知所云。 参考技术A 就是对这个元素(array)再调用这个函数,把里面如果是数字就变成2倍,如果是array就继续调用。递归函数。
PHP数组的遍历
对于012345...这样的数组可以用for进行遍历
$arr=array(‘a‘,‘b‘,‘c‘,‘d‘,‘e‘);
for($key=0;$key<count($arr);$key++){
echo $arr[key];
}
coun($arr)返回数组的个数
如果不是012345..这样的角标那么用
foreach($arr as $key=>$value)
- foreach - 遍历数组中的每个元素并循环代码块
以上是关于php的递归问题,$arr[$key]=doub($arr[$key])这句看了半天没看懂。下面是代码的主要内容,如果未能解决你的问题,请参考以下文章