一个整数被添加到数组中而不添加它

时间:2012-10-13 21:01:03

标签: php

您好我已经尝试使用PHP开发RPN计算器,并且在程序中的某个时刻,数字1突然出现在我的数组中。我用调试器检查了程序3次,我不明白从哪里来它来自。这是我的代码:

          if(isset($_GET["send"])){
                $v0 = $_GET["val0"];
                $a = explode(" ", $v0);
                $second_array = array();

                function operatii($v , $second_array){
                    $var1 = array_pop($second_array);
                    $var2 = array_pop($second_array);
                    $rez = null;

                    switch ($v){
                        case '+':
                            $rez = $var1 + $var2;
                            break;
                        case '-':
                            $rez = $var2 - $var1;
                            break;
                        case '*':
                            $rez = $var1 * $var2;
                            break;
                        case '/':
                            $rez = $var2 / $var1;
                            break;
                    }

                    array_push($second_array, $rez);
                    print_r($second_array);
                    echo '<br/>';
                }

                for($i = 0; $i < count($a); $i++){
                    if($a[$i] === "+" || $a[$i] === "-" || $a[$i] === "*" || $a[$i] === "/" ){
                        operatii($a[$i] , $second_array);
                        continue;
                    }else{
                        array_push($second_array, $a[$i]);

                    }
                }
            }


        ?>

        <form method="get" action="">
            <input type="text" value="<?php  ?>" name="val1" disabled/>
            <input type="text" value="" name="val0" />
            <input type="submit" value="Introdu" name="send"/>
        </form> 

长话短说这个表格将采用类似于5 1 - 5 +的表达式并执行此操作5 - 1 + 5.

问题出现在for循环运行两次并且operatii()方法运行它的序列之后,在方法结束时$ rez变量被推入$ second_array。在此之后,方法结束并且在operatii方法和下一个循环迭代1的开始之间进行,并将其添加到$ second_array中。

正如我之前提到的,我运行了3次调试器,我找不到任何合理的解释,为什么以及从哪个地方添加到数组中。任何人都可以告诉我们发生了什么以及如何纠正它? / p>

2 个答案:

答案 0 :(得分:2)

错误在于您将$ second_array作为值传递,而不是作为引用传递。这意味着数组被复制,并且您在operatii函数中所做的任何更改都不会影响函数之外的second_array。要做的是改变

function operatii($v , $second_array){

function operatii($v , &$second_array){

有关该主题的更多信息:

Are arrays in PHP passed by value or by reference?

答案 1 :(得分:1)

您的数组缺少&,您也可以将运算符保存在数组中

if (isset($_GET["send"])) {
    $_GET["val0"] = isset($_GET["val0"]) ? $_GET["val0"] : "";
    $a = explode(" ", $_GET["val0"]);
    $second_array = array();

    function operatii($v, &$second_array) {
        $var1 = array_pop($second_array);
        $var2 = array_pop($second_array);
        $rez = null;
        switch ($v) {
            case '+' :
                $rez = $var1 + $var2;
                break;
            case '-' :
                $rez = $var2 - $var1;
                break;
            case '*' :
                $rez = $var1 * $var2;
                break;
            case '/' :
                $rez = $var2 / $var1;
                break;
        }
        array_push($second_array, $rez);
        print_r($second_array);
        echo '<br/>';
    }

    $oprators = array("+","-","*","/");
    for($i = 0; $i < count($a); $i ++) {
        if (in_array($a[$i], $oprators)) {
            operatii($a[$i], $second_array);
            continue;
        } else {
            array_push($second_array, $a[$i]);
        }
    }
}