Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using strstr inside a switch php

I just cannot think of the code. I have waay too many if statments which I want to change to be a switch statement, but I cannot find of the logic.

At the moment I have:

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...

But how can I achieve the same within a switch?

like image 626
William Jones Avatar asked Jul 14 '11 10:07

William Jones


3 Answers

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;
}

Note, that this is slightly different to your own solution, because the switch-statement will not test against the other cases, if an earlier already matches, but because you use separate ifs, instead if if-else your way always tests against every case.

like image 99
KingCrunch Avatar answered Oct 14 '22 00:10

KingCrunch


I think you can't achieve this with switch (more elegant than now) because it compare values but you want compare only part of values. Instead you may use loop:

$patterns = array('texttosearch', 'texttosearch1', 'texttosearch2');
foreach ($patterns as $pattern) {
    if (strstr($var, $pattern)) {
        echo "String contains '$pattern'\n";
    }
}
like image 29
Slava Semushin Avatar answered Oct 14 '22 01:10

Slava Semushin


You can do it the other way around:

switch(true) {
case strstr($var, "texttosearch"):
    // do stuff
    break;
case strstr($var, "texttosearch1"):
    // do other stuff
    break;
}
like image 24
Mads Ohm Larsen Avatar answered Oct 13 '22 23:10

Mads Ohm Larsen