如果满足条件,但在条件语句中调用return,则函数返回null。返回条件以外的期望值

时间:2018-10-12 02:01:17

标签: php algorithm recursion binary-search

我正在尝试编写一个简单的脚本,该脚本对数组执行二进制搜索。如果我尝试在其中一个条件语句中调用return,则程序将成功运行,但不会返回任何内容。

当我在函数上调用var_dump()时,它返回null。下面,我做了一些评论,以表明它确实在条件语句之外返回了一个值。它还在条件内回显期望值。

谁能告诉我可能会发生什么?我机智。

<?php

$find = 56;
$data = array();

for($i = 1; $i < 100; $i++){

    $j = ($i * 2);

    array_push($data, $j);

}


function bin_sort($data,$find){
    //return $find; THIS WORKS
    $split = floor(count($data) / 2);
    $mid = $data[$split];
    if($mid == $find){
        return $mid;
        //echo $mid; THIS WORKS. IT ECHOS THE CORRECT VALUE
        //return 'test'; DOES NOT WORK
    }elseif($find > $mid){
        $key = array_search($mid, $data);
        $data1 = array_slice($data,$key);
        bin_sort($data1, $find);

    }elseif($find < $mid){
        $key = array_search($mid, $data);
        $data1 = array_slice($data, 0, $key);
        bin_sort($data1, $find);

    }
}

echo bin_sort($data, $find);


?>

2 个答案:

答案 0 :(得分:2)

您在bin_sort内部进行的递归调用之前没有return,因此,如果发生任何递归,则顶层仅返回null

答案 1 :(得分:1)

<?php

$find = 56;
$data = array();

for($i = 1; $i < 100; $i++){
    $j = ($i * 2);
    array_push($data, $j);
}


function bin_sort($data,$find){
    //return $find; THIS WORKS
    $split = floor(count($data) / 2);
    $mid = $data[$split];
    if($mid == $find){
        return $mid;
        //echo $mid; THIS WORKS. IT ECHOS THE CORRECT VALUE
        //return 'test'; DOES NOT WORK
    }elseif($find > $mid){
        $key = array_search($mid, $data);
        $data1 = array_slice($data,$key);
        return bin_sort($data1, $find);
    }elseif($find < $mid){
        $key = array_search($mid, $data);
        $data1 = array_slice($data, 0, $key);
        return bin_sort($data1, $find);
    }
}

echo bin_sort($data, $find);

仅当$ find首先等于$ mid时,您的代码才返回。