2010-10-28 79 views
0

第一個問題:對於device_id爲2的情況,輸出爲2,但在任何其他情況下,輸出仍然是2.爲什麼是這樣?在不同條件下輸出相同的結果

if ($line == "IMEI 358998018395510\r\n"){ 
    $device_id = 1; 
    }elseif($line == "IMEI 352924028650492\r\n"){ 
    $device_id = 3; 
    }else { 
    $device_id = 2; 
} 

第二個問題:我想,以取代上述else語句如下:

.. 
elseif ($line == "$GPVTG,0,T,0,M,0,N,0,K,A*23\r\n"){ 
    $device_id = 2; 
} 

但問題是,解析器斷層上面挑選出「$ GPVTG字符串的一部分「未定義。認爲它應該把它當作一個完整的字符串,因爲它在引號中?

+0

嘗試在if語句之前回顯$行,看看它是否是您認爲的。 – BenWells 2010-10-28 07:49:16

+0

這個問題的格式非常難看。我不想浪費我的時間。 – Starx 2010-10-28 07:49:29

回答

3
  1. 沒有一個條件匹配,所以它落在else子句中。

  2. 雙引號允許變量替換。轉義$或使用單引號。

+0

謝謝你的想法。 – ibiangalex 2010-10-28 09:54:38

0

在寫在雙引號PHP變量在運行時進行評估,並$用於表示變量,所以你需要逃避你的病情的$

0

我意識到我可以做以下事情並決定使用它。它工作得很好。感謝您的所有貢獻。

switch ($lineTokens[0]){ 
       case "IMEI 358998018395510\r\n": 
        $device_id = 1; 
        break; 
       case "IMEI 352924028650492\r\n": 
        $device_id = 3; 
        break; 
       case '$GPVTG': 
        $device_id = 2; 
        break; 

      }  

我想補充:對一些人提出的類似,我不得不確定何時使用單或雙引號中的最後一個CASE語句,逃避他們需要的時候。我使用$ linetokens而不是$ line,因爲之前在爆炸$行後提交。這使我只能找到'$ GPVTG'的匹配,而不是整個$行,這不是唯一的。

相關問題