我正在尝试编写一个简单的脚本,该脚本对数组执行二进制搜索。如果我尝试在其中一个条件语句中调用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);
?>
答案 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时,您的代码才返回。