Использование strstr внутри переключателя php - PullRequest
4 голосов
/ 14 июля 2011

Я просто не могу придумать код. У меня слишком много ожиданий, которые я хочу изменить, чтобы они стали оператором переключения, но я не могу найти логику.

На данный момент у меня есть:

if(strstr($var,'texttosearch'))
   echo 'string contains texttosearch';

if(strstr($var,'texttosearch1'))
   echo 'string contains texttosearch1';

if(strstr($var,'texttosearch2'))
   echo 'string contains texttosearc2h';

//etc etc...

Но как мне добиться того же в коммутаторе?

Ответы [ 3 ]

10 голосов
/ 14 июля 2011

Я думаю, что вы не можете достичь этого с switch (более элегантно, чем сейчас), потому что он сравнивает значения, но вы хотите сравнить только часть значений.Вместо этого вы можете использовать цикл:

$patterns = array('texttosearch', 'texttosearch1', 'texttosearch2');
foreach ($patterns as $pattern) {
    if (strstr($var, $pattern)) {
        echo "String contains '$pattern'\n";
    }
}
9 голосов
/ 14 июля 2011
switch (true) {
  case strstr($var,'texttosearch'):
    echo 'string contains texttosearch';
    break;
  case strstr($var,'texttosearch1'):
    echo 'string contains texttosearch1';
    break;
  case strstr($var,'texttosearch2'):
    echo 'string contains texttosearc2h';
    break;
}

Обратите внимание, что это немного отличается от вашего собственного решения, потому что заявление switch не будет проверять другие case, если более раннее уже совпадает, а потому что вы используете отдельный ifs, вместо этого, если if-else ваш путь всегда проверяет каждый случай.

2 голосов
/ 14 июля 2011

Вы можете сделать это наоборот:

switch(true) {
case strstr($var, "texttosearch"):
    // do stuff
    break;
case strstr($var, "texttosearch1"):
    // do other stuff
    break;
}
...