2012-09-19 53 views
0

在CentOS上的PHP 5.3.10中測試。在if語句(PHP)中組合賦值和等於時的奇怪結果

在腳本運行:

$test = "62 3/4"; 

if($pos = strpos($test,' ') !== false) { 
    $test= substr($test,0,$pos); // use $pos 
} 
// $test is "6" 

而在另一個獨立的腳本我運行:

if($pos = strpos($test,' ') !== false) { 
    $test = substr($test,0,strpos($test,' ')); // redo substr calculation 
} 
// $test is "62" 

$ POS應該是2(第三個字符是一個空間,從零開始,0 ,1,2),所以$測試應該是「62」,不是?

+0

更好使用$ test =「62 3/4」; instaed $ test =「62.75」.. ??? – Gautam3164

+0

當然更好使用62.75,但我只是想處理一些通過excel導入的不良數據。 62比6好,但不如63或62.75。 :) –

回答

3

運算符優先! !===之前,所以測試有效地成爲

if($pos = (strpos($test,' ') !== false)) 

這是會評估爲真或假,不是字符串位置。

始終使用顯式的括號:

if(($pos = strpos($test,' ') !== false) 
1

你想

if(($pos = substr($test, ' ')) !== false) { 
    // ... 
} 

PHP Operator Precedence

+0

'!===',太多'='! – nneonneo

+0

謝謝,neoonneo;我的壞:) –

0

同時認爲,在你的第二個如果,變量$測試的價值已經被改變第一個:$ test = substr($ test,0,$ pos);

+0

好吧,但這些不是真的一起運行。我跑了一個,然後是另一個。 –

+0

好的。我編輯了你的問題來澄清這一點。 –

+0

謝謝你這麼做! –