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

如何在Php中检查字符串是否包含精确的子字符串,php,strpos,Php,Strpos,我正在尝试检查字符串中是否存在表示1的数字,例如11,12,13为此,我使用strpos: <? $s = "2,3,11,12,13"; $ss = "1"; if(strpos($s, $ss)) echo "success"; else echo "fail"; ?> 此代码给出输出fail,但它应该给出true 编辑2:检查答案 问题已经解决,但由于每个循环的输出重复次数与数组中的值相同。我们如何让输出重复输出?您可以这样做: <?php $s = "2,3,11,

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

<?
$s = "2,3,11,12,13";
$ss = "1";
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";

$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";
试试这个:

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

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

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

您可以通过
变量
后添加逗号
来检查
开始时的出现情况,
变量之前添加逗号
以检查
最后一次
的出现情况,或
变量之前和之后添加逗号
以检查
中间
的出现情况

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";
}

您可以通过
变量
后添加逗号
检查
开始时的出现情况,
变量
前添加逗号
检查
最后一次
时的出现情况,或者
变量
前后添加逗号
检查
中间时的出现情况

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";
}
}
?>

通过添加一个
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";
}
}
?>


“1,2,3,4,5”
会用
1
返回成功吗?请注意:
strpos
可能会返回int(0),所以最好使用
===
比较
如果(strpos($s,$ss)!==false)
编辑2:到目前为止您尝试了什么?解决这个问题真的很容易,因为你只得到一次输出,我随时准备帮助你,但是如果你不努力解决这个问题,我不会给你解决方案。是不是
“1,2,3,4,5”
将返回成功的
1
?注意:
strpos
可能返回int(0)因此,最好使用
==
if(strpos($s,$ss)!==false)
与您的编辑进行比较2:到目前为止,您尝试了什么?解决这个问题真的很容易,因为你只得到一次输出,我随时准备帮助你,但是如果你不努力解决这个问题,我不会给你解决方案。@eviletech,
$ss
中的最大数字数是多少?2,甚至更多?它可以更多,但始终小于或等于
$s
@eviletech
$ss
中的最大数字计数是多少?2,甚至更多?它可以更多,但始终小于或等于
$s