Php 我可以在交换机机箱中使用STRPO吗?
考虑: 我有一个名为Php 我可以在交换机机箱中使用STRPO吗?,php,switch-statement,Php,Switch Statement,考虑: 我有一个名为$field的变量,除其他变量外,该变量可能不时具有action、id、和另一个术语等值。我想使用开关结构筛选值: switch ($field) { case 'action': // do something break; case 'id': // do something break; case (strpos($field, '_term')): // do so
$field
的变量,除其他变量外,该变量可能不时具有action
、id
、和另一个术语
等值。我想使用开关
结构筛选值:
switch ($field) {
case 'action':
// do something
break;
case 'id':
// do something
break;
case (strpos($field, '_term')):
// do something else
break;
}
前两个案例有效。第三个没有。我认为这是对switch语句的错误使用。作为if/else序列处理是否更好?开关只是一种
if x==y
,y是任何匹配的情况
case(strpos($field,'.'u term'))
如果未找到匹配项或找到“_term”的点(0到字符串长度-1)而不是字段名,则将导致-1
如果你想抓住现场有短语“\u term”的任何东西,请
$matches = array();
if(preg_match('/(.+)_term$/', $field, $matches)) {
$field = $matches[1];
}
这将替换字段值“address\u term”或其他任何“something\u term”为“address”或“something”您可以使用如下语句执行此操作:
$field = 'bla bla_term bla';
switch (true) {
case $field === 'action':
echo 'action';
break;
case $field === 'id':
echo 'id';
break;
case strpos($field, '_term') >= 0:
echo '_term';
break;
}
switch
语句只是将每个case
块中的表达式与switch
括号中的值进行比较
表达式是可以简化为值的代码单位,例如2+3
或strpos(…)
。在PHP中,大多数内容都是表达式
以下是上述示例的注释版本:
// We are going to compare each case against
// the 'true' value
switch (true) {
// This expression returns true if $field
// equals 'action'
case $field === 'action':
echo 'action';
break;
// This expression returns true if $field
// equals 'id'
case $field === 'id':
echo 'id';
break;
// This expression returns true if the
// return value of strpos is >= 0
case strpos($field, '_term') >= 0:
echo '_term';
break;
}
如果要使用strpos
调用的返回值,则可以分配它(分配是PHP中的表达式):
是的,你说得对。Strpos返回位置或-1,而不是字符串,因此大小写永远不会匹配。好的,我会重新考虑用什么来代替strposI。我更新了我的回复,告诉你我想做什么,但我不确定。你可以反其道而行之,以“/.+(_term)$/”作为表达式,它会将任何以“_term”结尾的内容转换为“_term”,因此你可以使用switch语句来表示“_term”:谢谢,这正是我正试图做的。对于其他人来说,尽管这个解决方案满足了我的需要,
另一部_terminator_电影
在第三种情况下也是如此。如果您需要明确说明\u term
是被测试字符串的最后一部分,那么可以使用类似于MiDri的答案,也可以使用其中一个[可能更合适。我想说您应该将最后一个大小写与!==false进行比较,因为如果子字符串不存在,strpos可以返回0:-来自php.net:此函数可能返回Boolean false,但也可能返回一个计算结果为false的非Boolean值。有关详细信息,请阅读Booleans部分。请使用===运算符测试此函数的返回值。
case ($pos = strpos($field, '_term')) >= 0:
echo '_term at position ' . $pos;
break;