Функция возвращает ноль, если return вызывается в условном выражении, несмотря на выполнение условия. Возвращает ожидаемое значение за пределами условного

Я пытаюсь написать простой скрипт, который выполняет двоичный поиск по массиву. Если я пытаюсь вызвать return внутри одного из условий, программа успешно запускается, но ничего не возвращает.

Когда я вызываю функцию var_dump (), она возвращает ноль. Ниже я добавил несколько комментариев, чтобы показать, что он возвращает значение за пределами условных операторов. Это также отражает ожидаемое значение в условном выражении.

Может кто-нибудь сказать мне, что может происходить? Я в конце остроумия.

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


?>

1

Решение

Ваши рекурсивные звонки внутри bin_sort не хватает return до них, так что если какая-либо рекурсия вообще происходит, верхний уровень просто возвращается null,

2

Другие решения

<?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.

1