7

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?

shanethehat
  • 15,460
  • 11
  • 57
  • 87
William Jones
  • 75
  • 1
  • 3
  • Actually `foreach` solution by `php-coder` is better to use `switch`. it will reduce line of codes. – jeni Jul 14 '11 at 10:15

3 Answers3

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

KingCrunch
  • 128,817
  • 21
  • 151
  • 173
11

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";
    }
}
Slava Semushin
  • 14,904
  • 7
  • 53
  • 69
2

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;
}
Ólafur Waage
  • 68,817
  • 22
  • 142
  • 198
Mads Ohm Larsen
  • 3,315
  • 3
  • 20
  • 22