尽管满足条件,但如果在条件语句中调用 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 语句而不是整个函数。
我正在尝试编写一个对数组执行二进制搜索的简单脚本。如果我尝试在其中一个条件中调用 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 语句而不是整个函数。