如果字符串以 "xx" 开头(PHP)

21
if ($_POST['id'] beginsWith "gm") {
$_SESSION['game']=="gmod"
}
if ($_POST['id'] beginsWith "tf2") {
$_SESSION['game']=="tf2"
}

如何做才能使它正常工作?


11
你需要编写一个C代码补丁,添加这个关键字/语法。 - Gordon
5个回答

35
你可以使用 substr函数
if(substr($POST['id'],0,3) == 'tf2')
 {
  //Do something
 }

编辑:修正了错误的函数名称(使用了substring(),应该使用substr()


3
相较于strpos函数,这个函数在失败时不会遍历整个字符串,因此速度可能会(稍微)更快。 - Emil Vikström
@EmilVikström,我严重怀疑你关于substr()strpos()更快的说法。事实上,我认为它会更慢 - PeeHaa

23
你可以使用strpos函数编写一个begins_with函数:
function begins_with($haystack, $needle) {
    return strpos($haystack, $needle) === 0;
}


if (begins_with($_POST['id'], "gm")) {
    $_SESSION['game']=="gmod"
}

// etc

4
if (strpos($_POST['id'], "gm") === 0) {
  $_SESSION['game'] ="gmod"
}
if (strpos($_POST['id'],"tf2") === 0) {
  $_SESSION['game'] ="tf2"
}

1
这是错误的。如果strpos返回false,那么这两个if语句都将被评估为true。 - andrewtweber
@andrewtweber:好了,我已经用===替换了== :-P - gen_Eric

3

虽然不是最快的方法,但您可以使用正则表达式来实现

if (preg_match("/^gm/", $_POST['id'])) {
    $_SESSION['game']=="gmod"
}
if (preg_match("/^tf2/, $_POST['id'])) {
    $_SESSION['game']=="tf2"
}

2
function startswith($haystack, $needle){ 
    return strpos($haystack, $needle) === 0;
}

if (startswith($_POST['id'], 'gm')) {
    $_SESSION['game'] = 'gmod';
}
if (startswith($_POST['id'], 'tf2')) {
    $_SESSION['game'] = 'tf2';
}

请注意,在为变量赋值时只使用单个等号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接