我想创建一个静态变量的函数,因为我需要保留函数之间的变量值。第一种方式,此变量包括最后一个索引数组,并且该值将在第二次运行时更改。如果我使用count()来搜索最后一个数组索引,我会收到以下错误:解析错误:解析错误,期待{C:\ wamp \ www \ rekurzio \ index.php中的','' or
'''' 11
<form method="POST">
Search the following number: <input type="number" name="numberQuestion">! <br>
<input type="submit" name="search" value="Search">
</form>
<?php function search(){
global $numberArray;
$numberQuestion = $_POST['numberQuestion'];
static $searchDirection = "RIGHT";
static $lowerLimit = 0; //it is the first array index
static $upperLimit = count($numberArray)-1 /* 8 */; //it is the last array index, but it doesn't work
if($lowerLimit == $numberQuestion){
$searchResult = "I found the $numberQuestion value which the $lowerLimit element";
echo $searchResult;
}else if($upperLimit == $numberQuestion){
$searchResult = "I found the $numberQuestion value which the $upperLimit element";
echo $searchResult;
}else{
$middleElement = ($lowerLimit+$upperLimit)/2;
if($middleElement == $numberQuestion){
$searchResult = "I found the $numberQuestion value which the $middleElement element";
echo $searchResult;
}else{
if($numberQuestion < $middleElement){
$searchDirection = "LEFT";
}else if($numberQuestion > $middleElement){
$searchDirection = "RIGHT";
}
if($searchDirection == "RIGHT"){
$lowerLimit = $middleElement;
}else if($searchDirection == "LEFT"){
$upperLimit = $middleElement;
}
search();
}
}
}
if(isset($_POST['search'])){
search();
} ?>
如何搜索最后一个数组索引?
答案 0 :(得分:3)
静态声明在编译时解析,因此尝试将值赋给这些表达式结果的变量将导致解析错误。有关参考,请参阅manual。
所以静态变量只能用文字或常量初始化;表达式是不允许的。虽然您可以将静态变量初始化为整数或数组(例如),但您可能无法将其初始化为另一个变量,函数返回值或对象。
<强>更新强>
在您的情况下,我建议3个静态范围变量($searchDirection
,$lowerLimit
和$upperLimit
)是函数参数而不是静态变量。在这种情况下,它们的作用域仍然是search
函数的本地作用域,但是您可以在初始化之前动态设置正确的值,然后再对函数进行递归调用。
答案 1 :(得分:1)
我无法发表评论,因为我没有足够的声誉。
我建议你做两件事:
首先:将第11行转换为
static $upperLimit = count($numberArray)-1; /* 8 */
其次,在上面一行之前做var_dump($numberArray);
。似乎那边存在某种简单的语法错误。