如何使用strpos在字符串中找到准确的2,
?是否可以使用strpos?下面的示例返回“Found”,即使匹配不符合我的要求。我了解2,
与22,
匹配。它应该返回“Not Found”。我在这个例子中匹配ID。
$string = "21,22,23,26,";
$find = "2,";
$pos = strpos($string, $find);
if ($pos !== false) {
echo "Found";
} else {
echo "Not Found";
}
答案 0 :(得分:4)
除非字符串很大,否则请创建一个数组并搜索它:
$string = "21,22,23,26,";
$arr = explode(",", $string);
// array_search() returns its position in the array
echo array_search("2", $arr);
// null output, 2 wasn't found
实际上,in_array()
可能更快:
// in_array() returns a boolean indicating whether it is found or not
var_dump(in_array("2", $arr));
// bool(false), 2 wasn't found
var_dump(in_array("22", $arr));
// bool(true), 22 was found
只要您的字符串是以逗号分隔的值列表,这将起作用。如果字符串真的很长,那么制作一个数组可能会浪费内存。改为使用字符串操作解决方案。
你没有指定,但是如果这些字符串有可能来自数据库表,我只想补充一点,适当的操作方法是将它正确地规范化为另一个表,每个id有一行而不是存储它们作为分隔的字符串。
答案 1 :(得分:1)
尝试使用explode
和in_array
示例:
$string = "21,22,23,26,";
$string_numbers = explode(",", $string);
$find = 2;
if (in_array($find, $string_numbers)) {
echo "Found";
} else {
echo "Not Found";
}
答案 2 :(得分:1)
如果要避免使用数组,可以使用preg_match。
$string = "21,22,23,26,";
$find = '2';
$pattern = "/(^$find,|,$find,|,$find$)/";
if (0 === preg_match($pattern, $string)) {
echo "Not Found";
} else {
echo "Found";
}
这会在字符串的开头,中间或末尾找到你的id。当然,我假设$ string不包含数字和逗号之外的字符(如空格)。