2015-10-07 37 views
-8

嗨我正在測試我的程序從txt文件中讀取字符串行。如果陳述總是假的,即使值比較必須產生真實結果

我將結果傳送到一個數組,但經測試,如果語句通過if和switch語句總是返回假的/其他/默認結果最後一個數組轉換爲字符串。

我的代碼是:

<?php 
    $test = file('test.txt'); 
    foreach ($test as $row) 
    { 
     $temp = explode(' ', $row); 
     echo "$row<br>"; 
     $id = (int)$temp[0]; 
     $date = substr($temp[1], 0, 2) . "-" . substr($temp[1], 2, 2) . "-" . substr($temp[1], 4, 4); 
     $time = substr($temp[2], 0,2) .":". substr($temp[2], 2,2) .":00"; 
     $twt = (string)substr($row, 18); 
     echo substr($row, 18); 
     switch ($twt) { 
      case 'I': 
       echo "wew"; 
       break; 

      default: 
       echo "wow"; 
       break; 
     } 
     echo "id: $id date: $date time: $time status: <br>"; 
    } 
?> 

的這個輸出是:

005 09012015 0811 I 
I wew id: 5 date: 09-01-2015 time: 08:11:00 status: 
005 09012015 1813 O 
O wew id: 5 date: 09-01-2015 time: 18:13:00 status: 
005 09022015 0756 I 
I wew id: 5 date: 09-02-2015 time: 07:56:00 status: 
005 09022015 1951 O 
O wew id: 5 date: 09-02-2015 time: 19:51:00 status: 

感謝您的幫助。我有點困惑。我知道$ temp [3]數組包含'I'值。但它仍然在其他輸出上。

+3

上午我瞎了?你在哪裏使用'if'或'else'?你想要做什麼,你得到的輸出有什麼問題? –

+0

對不起,我發佈了修改後的一個。 我首先使用的代碼是 如果($ TWT == 「I」){ \t \t \t $狀態= 「哇」; \t \t} \t \t其他 \t \t { \t \t \t $狀態= 「WEW」; \t \t} –

+0

但我不斷獲取的其他輸出數組的連值==「我」 –

回答

1

file()默認情況下將保持斷行/換頁符。因此,代替I,即chr(73),您有三個字符,可能是chr(73)chr(13)chr(10)或chr(73)chr(10)chr(13)。
但有一個標誌,您可以將其作爲第二個參數傳遞以刪除這些字符(並且也會忽略其他空行)。

$test = file('test.txt', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); 
+0

你從哪裏看到if語句? :D –

+1

我沒有。在瀏覽評論之後,顯然可以忽略「文本」這個問題(甚至更早)。並且'我嘗試了var_dump($ twt)並且輸出是字符串(3)「I」'把它給了;-) – VolkerK

+0

@VolkerK感謝這個小夥子! –

0

可能包含空格或換行字符。試試這個

$string = trim(preg_replace('/\s\s+/', ' ', $twt)); 

或本

$string = str_replace(' ', '', $twt); 
+0

第一個有點太複雜了,不是嗎?'$ string = preg_replace('/ \ s + /','',$ twt);'會做同樣的操作(雖然不完全相同);-)第二個可能不會修復它,因爲有問題的字符這裏最有可能的是換行符或者提要,而不是簡單的空間。 – VolkerK