尽管满足条件,但如果在条件语句中调用 return,则函数 return 为 null。 Returns 期望值超出条件

Function returns null if return is called within a conditional statement despite meeting the condition. Returns expected value outside of conditional

我正在尝试编写一个对数组执行二进制搜索的简单脚本。如果我尝试在其中一个条件中调用 return,程序会成功运行,但它不会 return 任何东西。

当我在函数上调用 var_dump() 时,它 return 为空。下面我放了一些评论来表明它 return 是条件语句之外的值。它还在条件中呼应期望值。

谁能告诉我发生了什么事?我束手无策。

<?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);


?>

您在 bin_sort 中的递归调用在它们之前缺少 return,因此如果发生任何递归,顶层只是 returns 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);
        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);

您的代码仅 return 当 $find 首先等于 $mid 时。

if 有一个 if 条件范围,它是 returned inside if 语句而不是上层函数。所以 return 将适用于 if 语句而不是整个函数。