首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

php静态数组

发布网友 发布时间:2022-04-24 13:54

我来回答

1个回答

热心网友 时间:2023-10-15 07:04

解决办法一:

$newarr不要用静态数组,而是在每次递归调用后把返回值(数组)与上一层的$newarr进行合并即可,这样的话不管调用多少次,$newarr都不会保留上次的值

function unless($arr, $fid = 0){
    $newarr=array();
    foreach ($arr as $v){
        if ($v["pid"] == $fid){
            $newarr[] = $v;
            $newarr=array_merge($newarr,unless($arr, $v["did"]));
        }
    }
    return $newarr;
}

解决办法二:

如果参数$fid只有在首次运行(非递归)是为0,在递归调用时都不是0,那么可以根据这个在首次运行时重新初始化$newarr,这样在外部多次调用这个函数都不会保留上次的值

function unless($arr, $fid = 0){
    static $newarr=array();
    if($fid==0)$newarr=array();
    foreach ($arr as $v){
        if ($v["pid"] == $fid){
            $newarr[] = $v;
            unless($arr, $v["did"]);
        }
    }
    return $newarr;
}

如果在递归的时候$fid仍然有可能是0,那么可以新增加一个参数,用来标记是否首次运行:

function unless($arr, $fid = 0, $x=0){
    static $newarr=array();
    if($x==0)$newarr=array();
    foreach ($arr as $v){
        if ($v["pid"] == $fid){
            $newarr[] = $v;
            unless($arr, $v["did"], 1);
        }
    }
    return $newarr;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com