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])这句看了半天没看懂。下面是代码的主要内容,如果未能解决你的问题,请参考以下文章

PHP 把null转为 ' ' 的递归方式

PHP递归题目

php——n维数组的遍历——递归

二分查找递归返回无

PHP 数组转json格式,key的保存问题

php算法之递归排序