问题
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?
回答1:
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 case
s, if an earlier already matches, but because you use separate if
s, instead if if-else
your way always tests against every case.
回答2:
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";
}
}
回答3:
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;
}
来源:https://stackoverflow.com/questions/6691483/using-strstr-inside-a-switch-php