如何检查字符串是否包含 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 comma
在 variable
之后检查以检查在 start
处的发生情况,在 variable
之前通过 appending comma
检查在 [=16 处发生的情况=] 或 appending comma
在 variable
之前和之后检查在 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";
}
}
?>
我正在尝试检查字符串 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 comma
在 variable
之后检查以检查在 start
处的发生情况,在 variable
之前通过 appending comma
检查在 [=16 处发生的情况=] 或 appending comma
在 variable
之前和之后检查在 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";
}
}
?>