2014-02-11 2 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 

Но вместо этого, он читает только первую часть условия, и возвращает его, правда, когда она ложна.

+0

StrPos возвращает номер (позицию) или false (никогда не истинно), я не знаю, сравнивает ли 'strpos()! == true' что-то, попробуйте сравнить с false –

+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 Если вы нашли что-то, верните местоположение соответствующей фразы/подстроки, а если нет, верните false. Но по какой-то причине === false не работает на моем, поэтому мы просто ищем int больше -1, потому что начало строки равно 0. так что да. – Craftein

0

strpos($a, $b)!==true всегда false, потому что strpos возвращает целое число, когда строка найдена.

Вместо этого использовать strpos($a, $b) === false.

+0

, но он читает первый оператор if – Clary

+0

Чтобы логическая логика продолжала работать, вам также придется изменить' OR' на 'AND'. –

0

Он работает так, как вы его написали. strposnevertrue. Он возвращает положение иглы, если обнаружено или ложно.

Итак, ваше первое условие всегда правильное.

Что вам нужно сделать, это:

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; 
    } 
Смежные вопросы