在字符串中找到确切的字符串 - PHP

时间:2012-05-09 17:50:43

标签: php

如何使用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";
}

3 个答案:

答案 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)

尝试使用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";
}

答案 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不包含数字和逗号之外的字符(如空格)。