0

テキストの文字列内に単語が存在するかどうかを判断しようとしています。単語が存在する場合は、関連する文字列を出力します。このコードはすべてのユーザーではなく一部のユーザーでは機能しているように見えるため、問題が発生しています。

$active = $db->query("SELECT * FROM activity ORDER BY aTIME DESC LIMIT 15");

while($activity = $db->fetch_row($active))
{
    $haveact = $activity['activity'];
    $username = $r['username'];
    if(strpos($haveact, $username))
    {
        print " <div class='activitydiv'>   
                {$activity['activity']} &nbsp&nbsp&nbsp&nbsp<small><font color='grey'>
                {$activity['aTIME']}</font></small>
                </div>";
    }
}
4

7 に答える 7

1

strposは見つかったテキストの位置を返すことに注意してください。たとえば、検索している単語が文字列の先頭にある場合、関数は「0」を返します。0 が偽の値であることを考えると、単語が見つかったとしても、関数を同じように使用すると真にはなりません。strpos の正しい使い方は次のとおりです。

if (strpos($haystack, $needle) !== false) // Note the type check. 
{ 
    // your code...
}

さらに、この関数はデフォルトで大文字と小文字を区別します。stripos大文字と小文字を区別しない検索に使用できます。

編集

マニュアルから:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE

理解を深めるために、次の例を確認してください。

strpos('the quick brown fox jumps over the lazy dog', 'the'); // Returns 0 (false value)
strpos('the quick brown fox jumps over the lazy dog', 'quick'); // Returns 4 (true value)
strpos('the quick brown fox jumps over the lazy dog', 'THE'); // Returns false (case sensitive)
于 2013-06-01T17:33:37.987 に答える
0

Hauke P. が述べたように、PHP でこれを行わないでください。データベースで一致する行をフィルタリングしたい。WHERE row LIKE %foo%より多くのパワーが必要なために使用したくない場合はREGEX、MYSQL で使用することもできます。PHPでデータを処理しないでください。そんなことしたら設計ミスです。

LIKE、SELECT、および REGEX については、MySQL ヘルプ ファイルを参照してください。

ヒント: http://www.mysql.com/

于 2013-06-01T19:12:54.840 に答える
-1

別のオプションです。短いため、私は通常使用します:)

if (strpos($haveact, $username) !== false) {
    // In string. 
}
于 2013-06-01T17:46:26.810 に答える
-1

別の方法として、php の preg_match 関数を試すことができます。

if (preg_match("/{$to_search}/" , $subject)) {
  // your code to process
}
于 2013-06-01T18:02:55.397 に答える
-1

strpos()針が見つからない場合はブール値の FALSE を返します。見つかった場合は、文字列内のオフセットの整数値。そのオフセットは 0 にすることができます。これは、緩やかな比較ではブール FALSE と同等です。

使用する

if(strpos($haveact, $username) !== FALSE)
于 2013-06-01T17:33:52.840 に答える
-1

strpos は、基本的に同じ「値」である 0 と FALSE を返す可能性があります。

次のようなタイプと値を確認する必要があります

strpos($haveact,$username) !== FALSE

于 2013-06-01T17:34:06.087 に答える