1

如何2,使用 strpos 在字符串中找到精确值?可以使用strpos吗?即使匹配不完全符合我的需要,下面的示例也会返回“找到”。我理解2,是匹配22,. 它应该返回“未找到”。在此示例中,我匹配 ID。

$string = "21,22,23,26,";
$find = "2,";

$pos = strpos($string, $find);
if ($pos !== false) {
   echo "Found";
} else {
   echo "Not Found";
}
4

3 回答 3

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 一行,而不是将它们存储为分隔细绳。

于 2012-05-09T17:52:37.500 回答
1

尝试explodein_array

例子:

$string = "21,22,23,26,";
$string_numbers = explode(",", $string);
$find = 2;
if (in_array($find, $string_numbers)) {
   echo "Found";
} else {
   echo "Not Found";
}
于 2012-05-09T17:54:36.683 回答
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 不包含除数字和逗号以外的字符(如空格)。

于 2012-05-09T18:35:37.043 回答