2014-02-11 130 views
0
<?php 


$V = "Stormy"; 
$W = "Heavy thunderstorms"; 

function getMyString($SentenceSrc) 
{ 
    if ((strpos($SentenceSrc,'Heavy thunderstorms')!== true) OR (strpos($SentenceSrc,'Heavy t-storms')!== true)) 
    $SentenceVariable = "Rains with gusty winds"; 

    elseif ((strpos($SentenceSrc,'Sun')!== true) OR (strpos($SentenceSrc,'sun')!== true)) 
     $SentenceVariable = "Sunny"; 
    elseif ((strpos($SentenceSrc,'Stormy')!== true)) 
     $SentenceVariable = "Stormy"; 
    else 
     $SentenceVariable = "Partly cloudy "; 

    return $SentenceVariable; 
} 



echo getMyString($V); 
echo getMyString($W); 


?> 

這是我的代碼。輸出應該是:PHP:功能不工作

StormyRains with gusty winds 

但是,它只讀取條件的第一部分,並在其爲false時返回True。

我的getMyString($SentenceSrc)應該在給定字符串中找到一個字符串,並在給定字符串返回true時返回天氣狀況。

+0

strpos返回一個數字(的位置)或假(從來沒有),我不知道是否比較'strpos()!== true'在做什麼,試着比較假 –

+0

而不是'OR',你應該嘗試使用'||' –

回答

1

我已經改變了你的!== true> -1

<?php 
$V = "Stormy"; 
$W = "Heavy thunderstorms"; 

function getMyString($SentenceSrc) 
{ 
    if ((strpos($SentenceSrc,'Heavy thunderstorms') > -1) OR (strpos($SentenceSrc,'Heavy t-storms') > -1)) 
     $SentenceVariable = "Rains with gusty winds"; 
    elseif ((strpos($SentenceSrc,'Sun') > -1) OR (strpos($SentenceSrc,'sun') > -1)) 
     $SentenceVariable = "Sunny"; 
    elseif ((strpos($SentenceSrc,'Stormy') > -1)) 
     $SentenceVariable = "Stormy"; 
    else 
     $SentenceVariable = "Partly cloudy "; 

    return $SentenceVariable; 
} 

echo getMyString($V); 
echo '<br />'; 
echo getMyString($W); 
?> 
+0

謝謝!我可以要求解釋嗎? – Clary

+0

+1快速回答。我也發佈了答案,但因爲你給我的第一個我已經刪除了我的帖子 –

+0

@Clary如果找到了一些東西,返回匹配短語/ substring的位置,如果沒有,返回false。但由於某種原因,=== false在我的工作中不起作用,所以我們只查找大於-1的int,因爲字符串的起始位置是0.所以是的。 – Craftein

0

strpos($a, $b)!==true始終爲false,因爲strpos在找到字符串時返回整數。

改爲使用strpos($a, $b) === false

+0

它仍然讀取第一個if語句 – Clary

+0

爲了使布爾邏輯繼續工作,你必須將'OR'也改爲'AND'。 –

0

它正在運行你寫它的方式。 strpos從未回報真正。如果發現或錯誤,它會返回針的位置。

所以你的第一個條件總是正確的。

你需要做的是:

if ((strpos($SentenceSrc,'Heavy thunderstorms')=== false) OR (strpos($SentenceSrc,'Heavy t-storms')=== false)) 
0

試試這個

function getMyString($SentenceSrc) 
    { 
     if (stristr($SentenceSrc,'Heavy thunderstorms') || stristr($SentenceSrc,'Heavy t-storms')){ 
      $SentenceVariable = "Rains with gusty winds"; 
     } 
     elseif (stristr($SentenceSrc,'Sun') || stristr($SentenceSrc,'sun')){ 
      $SentenceVariable = "Sunny"; 
     } 
     elseif (stristr($SentenceSrc,'Stormy')){ 
      $SentenceVariable = "Stormy"; 
     } 
     else { 
      $SentenceVariable = "Partly cloudy "; 
     } 
     return $SentenceVariable; 
    }