2012-10-13 102 views
0

您好我一直在tryng使用PHP開發的RPN計算器在程序中數字1出現從哪兒冒出來進入我的array.I某些時候已經檢查程序3與調試時間,我不它是從哪裏來的from.Here明白的是我的代碼:一個整數被添加到一個數組中沒有我將它添加

  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> 

長話短說這種形式將採取expressiong這樣5月1日至5日+,做此操作5 - 1 +5。

for循環運行兩次和operatii()方法運行它的序列,在$蘇亞雷斯變量獲取的推法結束後出現的問題進入$ second_array。在此之後該方法結束的和beetween的operatii方法和下一個循環週期1 GET的加入$ second_array的開始。

正如我前面提到的,我運行調試器3次,我無法找到任何合理的解釋,爲什麼和從哪裏1被添加到數組中。任何人都可以告訴發生了什麼,我該如何糾正它?

+0

你不應該被second_array傳遞作爲參考,istead作爲價值? –

回答

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

您陣列丟失&,你也可以保存你的運營商一個數組中,而不是

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]); 
     } 
    } 
} 
相關問題