如何在PHP中创建一个返回最后一个数组索引的静态变量?

时间:2015-04-18 08:59:51

标签: php arrays indexing

我想创建一个静态变量的函数,因为我需要保留函数之间的变量值。第一种方式,此变量包括最后一个索引数组,并且该值将在第二次运行时更改。如果我使用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();
        } ?>

如何搜索最后一个数组索引?

2 个答案:

答案 0 :(得分:3)

静态声明在编译时解析,因此尝试将值赋给这些表达式结果的变量将导致解析错误。有关参考,请参阅manual

所以静态变量只能用文字或常量初始化;表达式是不允许的。虽然您可以将静态变量初始化为整数或数组(例如),但您可能无法将其初始化为另一个变量,函数返回值或对象。

<强>更新 在您的情况下,我建议3个静态范围变量($searchDirection$lowerLimit$upperLimit)是函数参数而不是静态变量。在这种情况下,它们的作用域仍然是search函数的本地作用域,但是您可以在初始化之前动态设置正确的值,然后再对函数进行递归调用。

答案 1 :(得分:1)

我无法发表评论,因为我没有足够的声誉。

我建议你做两件事:

首先:将第11行转换为 static $upperLimit = count($numberArray)-1; /* 8 */

其次,在上面一行之前做var_dump($numberArray);。似乎那边存在某种简单的语法错误。