如何检查字符串是否包含 Php 中的精确子字符串

How to check if a string contains an exact substring in Php

我正在尝试检查字符串 11,12,13 中是否存在数字 1 为此,我正在使用 strpos:

<?
$s = "2,3,11,12,13";
$ss = "1";
if(strpos($s, $ss)) echo "success";
else echo "fail";
?>

在这里,我期望代码给出 fail 作为输出,但它给出了 success。 有什么函数可以用来精确匹配字符串中的数字吗?我想要字符串中的数字 1,而不是包含 1 的数字,例如 11,123,100

编辑 1: @Twinfriends 的回答工作正常,但问题是用多个数字来做。

<?
    $s = "2,3,11,12,13";
    $ss = "1,2";
    if(strpos($s, $ss)) echo "success";
    else echo "fail";
    ?>

此代码给出输出 fail 但它应该给出 true。

编辑 2: 检查答案

问题已解决,但由于每个循环,输出重复的次数与数组中的值一样多。怎样才能让输出重复输出呢?

你可以这样做:

<?php

$s = "2,3,11,12,13";
$ss = "1";

$toTest = explode(",", $s);

if(in_array("$ss", $toTest)) {
    echo "success";
}
else {
    echo "fail";
}

?>

如果您对这段代码有任何疑问,请随时提问。 (代码测试,运行良好)

试试这个:

<?php
$s = "2,3,11,12,13";
$ss = "1";

$haystack = explode(",",$s);
$matches  = preg_grep ("/$ss/", $haystack);

echo !empty($matches) ? "success" : "fail";

您可以通过 appending commavariable 之后检查以检查在 start 处的发生情况,在 variable 之前通过 appending comma 检查在 [=16 处发生的情况=] 或 appending commavariable 之前和之后检查在 middle 处出现的情况。

if((substr($s, 0, (strlen($ss)+1)) === $ss.',')||(substr($s, (strlen($s)-strlen($ss)-1), strlen($s)) === ','.$ss)||(strpos($s, ','.$ss.','))){
        echo "success";
}
else{
        echo "fail";
}

问题已通过添加 foreach 循环解决:

<?
$s = "2,3,11,12,13";
$ss = "1,2,3,5";

$catid = explode(",", $s);
$ocat = explode(",",$ss);

    foreach($ocat as $abc) {
if(in_array($abc, $catid)) {
 echo "success";
}
else {
echo "fail";
}
}
?>