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))
?> 展开
// 一个多维数组,如果单元值为数字,则把其值修改为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))
?> 展开
2个回答
展开全部
不太好解释啊!
就拿$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更加复杂,其实无非就是以上过程不断重复重复再重复
哎,难得有此兴致,吾已尽力,不知所云。
就拿$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更加复杂,其实无非就是以上过程不断重复重复再重复
哎,难得有此兴致,吾已尽力,不知所云。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询