1

2,strposを使用して文字列を正確に見つけるにはどうすればよいですか?strposを使用することは可能ですか?以下の例では、一致が必要なものと正確ではない場合でも、「Found」が返されます。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ごとに1行で別のテーブルに適切に正規化することであると付け加えます.ストリング。

于 2012-05-09T17:52:37.500 に答える
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 に答える
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";
}
于 2012-05-09T17:54:36.683 に答える