php的递归问题,$arr[$key]=doub($arr[$key])这句看了半天没看懂。下面是代码

<?php//一个多维数组,如果单元值为数字,则把其值修改为2倍//如array(1,2,'b',array(3,'c',array(4,5)))$arr=array(1... <?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))
?>
展开
 我来答
fhq198604
2015-05-19 · TA获得超过805个赞
知道小有建树答主
回答量:236
采纳率:100%
帮助的人:368万
展开全部
不太好解释啊!
就拿$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更加复杂,其实无非就是以上过程不断重复重复再重复

哎,难得有此兴致,吾已尽力,不知所云。
Patrick1121
2015-05-19 · 超过33用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:59.3万
展开全部
就是对这个元素(array)再调用这个函数,把里面如果是数字就变成2倍,如果是array就继续调用。递归函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式