为什么我return以后取不到返回值?困扰了很久了,求大神来帮忙。。。

火鸟集团 2016-10-17 09:15:44


function test_sort($array){

for($i=0;$i<count($array);$i++){

for($y=$i+1;$y<count($array);$y++){

$tem = null;
if($array[$i]>$array[$y]){
$tem = $array[$i];
$array[$i] = $array[$y];
$array[$y] = $tem;
}

}
}
return $array;
}

function max_all($data,$max=[]){
$list = null;
$val = array_pop($data);
$max[] = $val;

if($max[0] === $data[count($data) - 1]){
max_all($data,$max);
}else{
array_unshift($data,$max);
print_r($data);//这里是有值的
return ($data);//为什么return不了值??????
die;
}

}
$array = [8,5,0,0,0,4,7,8,4,1,1,8,8];
$data = test_sort($array);
$list = max_all($data); //打印出来的值为什么为空?????????????????????
print_r($list);

...全文
812 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2016-10-17
  • 打赏
  • 举报
回复
max_all($data,$max); 这里加return 即改为

function test_sort($array){
 
        for($i=0;$i<count($array);$i++){
 
            for($y=$i+1;$y<count($array);$y++){
 
                $tem = null;
                if($array[$i]>$array[$y]){
                    $tem = $array[$i];
                    $array[$i] = $array[$y];
                    $array[$y] = $tem;
                }
 
            }
        }
        return $array;
    }
 
    function max_all($data,$max=[]){
        $list = null;
        $val = array_pop($data);
        $max[] = $val;
 
        if($max[0] === $data[count($data) - 1]){
            return max_all($data,$max);
        }else{
            array_unshift($data,$max);
            print_r($data);//这里是有值的
            return ($data);//为什么return不了值??????
            die;
         }
         
    }
    $array = [8,5,0,0,0,4,7,8,4,1,1,8,8];
    $data = test_sort($array);
    $list = max_all($data); //打印出来的值为什么为空?????????????????????
    print_r($list);
xuzuning 2016-10-17
  • 打赏
  • 举报
回复
那你就 觉得 好了
火鸟集团 2016-10-17
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
不要孤立的看问题 如果你把第 25 行注释掉,那么第 28 行还能打印出数据吗?显然是不能的! 由此可知,第 25 行的 max_all($data,$max); 是被执行到的。 既然执行了,那么为何不接收他的返回呢?

	function max_all($data,$max=[]){
		$list = null;
		$val = array_pop($data);
		$max[] = $val;

		if($max[0] === $data[count($data) - 1]){
			$list = max_all($data,$max);
			return $list;
		}else{
			array_unshift($data,$max);			
			return ($data);
			die;
 		}
		
	}

这样写的话我感觉怎么是个死循环呀?
果酱很好吃 2016-10-17
  • 打赏
  • 举报
回复
你一直调用 max_all,如调用了三次,第三次返回了数据(return),那么只能在第二次调用的时候能获取到返回值,第一次就获取不到,你要把 max_all 调用返回的数据作为结果再返回,第一次才能获取最终的数据,递归调用就是这样
xuzuning 2016-10-17
  • 打赏
  • 举报
回复
不要孤立的看问题 如果你把第 25 行注释掉,那么第 28 行还能打印出数据吗?显然是不能的! 由此可知,第 25 行的 max_all($data,$max); 是被执行到的。 既然执行了,那么为何不接收他的返回呢?
火鸟集团 2016-10-17
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
第 25 行应为 return max_all($data,$max); 只是 max_all($data,$max); 的话,你只调用了排序算法,并没有取回排序结果
但是我需要的就是28行的数据呀,为什么能打印出来却返回不了??????
xuzuning 2016-10-17
  • 打赏
  • 举报
回复
第 25 行应为 return max_all($data,$max); 只是 max_all($data,$max); 的话,你只调用了排序算法,并没有取回排序结果

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧