2011-03-22 134 views
0

我有一些問題,我只是在調試,特別是如果一個已經設置的變量分配給一個未定義的值會發生什麼。我只是想檢查我是否瞭解發生了什麼。如果一個變量已經設置了一個值,並且您嘗試將其設置爲未定義的值,它會保持原來的值嗎?PHP設置賦值變量爲undefined - 保持不變 -

具體來說,我有一些PHP代碼看起來像這樣 - 假設$ string是一些1和2的字符串。現在

$array = array(1 => 'foo', 2 => 'bar'); 
for($count=0;$count<len($string);$count++) 
{ 
    $newvar = $array[$string[$count]]; 
    if(!empty($newvar)) 
    { 
     switch($newvar) 
     { 
      case 'foo': 
        // blah blah break; 
      case 'bar': 
        // blah blah break; 
     } 
    } 
} 

,我的代碼應該設置$ string要像「12212」,但由於我的錯誤是在年底將其發送與多餘的空格的東西 - 「12212」。這導致了一些異常的行爲,我認爲發生了什麼 - 當$ count = 5,$ string [5]是未定義的,所以$ array [$ string [5]]是未定義的,$ newvar保持爲2.因此,我的如果(!空語句沒有做它的工作和案例'酒吧'發生了更多的時間比它應該有。這似乎會發生什麼?

當然,修剪$字符串解決了我的問題,但我想以確保我明白什麼是錯誤的道歉,如果這是一個愚蠢的問題 - 我只是一個業餘愛好者在這裏...

編輯:這是實際的代碼$ upstr應該是一串數字。

  $len = strlen($upstr); 
      $cost=0; 
      $upnames = array(4=>"man", 2=>"raw", 1=>"food", 3=>"fuel",5=>"tech"); 
      for($strloop=0;$strloop<$len; $strloop++) 
      { 
       $number = $upstr[$strloop]; 
       if(! empty($number)) 
       { 
        $name = $upnames[$number]; 
        $cost+= mysql_result($result1,0,$name) +1; 
        if(mysql_result($result2,0,$name."up")==1) 
        { 
         $cost+=100; 
        } 
       } 
      } 

當$ upstr在最後有一些額外的空格時發生了什麼,我會看到一個mysql錯誤,它無法在$ result2中找到列「up」。所以它試圖在$ name爲空或者NULL的if()語句中運行該代碼塊。如果我有意添加3或4個額外的空格,我會看到很多mysql錯誤。

回答

2

恐怕變量$陣列的定義是在代碼中例如不正確,它應如下所示:

$陣列=陣列(1 =>「富」,2 =>「巴」) ;

如果將$ newvar設置爲$ array的未定義元素(例如3),則$ newvar將被設置爲NULL。

+0

謝謝 - 剛剛糾正了原來的問題。所以如果$ newvar是NULL,那麼我的if(!empty($ newvar))語句應該已經跳出了交換機?它似乎並不是...... – coolpapa 2011-03-22 08:56:28

+0

是的,當$ newvar爲NULL時,空($ newvar)應計算爲true,但恕我直言,以下解決方案將更清潔:if(empty($ newvar)){break ; } – 2011-03-22 09:00:30

+0

奇怪,因爲我得到的錯誤告訴我交換機實際上正在發生......應該發佈我的實際代碼嗎? – coolpapa 2011-03-22 09:13:05

0

使用array_key_exists($array, $string[$count])來檢查您的數組是否對您的密鑰有價值。

+0

謝謝 - 這是另一個很好的解決方案。但我更感興趣的是爲什麼我的錯誤。我只想了解我遇到的任何意外行爲。 – coolpapa 2011-03-22 09:12:00

0

好吧,我已經知道是什麼導致了我看到的行爲。在empty()下,字符串''和''的行爲是不同的。其中一個被認爲是空的,另一個不是,這讓我感到困惑。非常感謝所有的幫助。

+0

你應該在評論中寫下它,因爲這不是答案 – diEcho 2011-03-22 09:39:47

+1

你可以使用trim($ upstr)從字符串的開頭和結尾刪除不必要的空格。使用一組數字而不是字符串來遍歷它也是一個不錯的方法。另一個想法是做這樣的事情:$ up_arr = str_split(trim($ upstr)),因爲這會將修剪的字符串的字符拆分爲數組。 – 2011-03-22 09:47:24

+0

是的,謝謝。修剪是我正在使用的解決方案。我真的只是問,因爲我不知道發生了什麼問題。事實上,這就是我的問題的答案,即「爲什麼多餘的空格搞砸了這些代碼?」,而不是「我該如何擺脫多餘的空間?」......是否會對其他人有所幫助是有爭議的。使用數組的問題在於$ upstr從html表單傳遞過來,所以AFAIK我不能以這種方式發送數組 - 只是一個字符串。 – coolpapa 2011-03-22 09:54:30