10

私はstackoverflowでこの例を見つけました:

if (strpos($a,'are') !== false) {
    echo 'true';
}

しかし、どうすれば2つの単語を検索できるようになりますか。次のようなものが必要です。$aに「are」または「be」という単語が含まれている場合、または両方がecho「contains」である場合。

xorと||を試しました

4

9 に答える 9

10

両方の単語を別々にチェックし、boolean or-operatorを使用して、一方または両方が$a:に含まれているかどうかをチェックします。

if (strpos($a,'are') !== false || strpos($a,'be') !== false) {
  echo "contains";
}

or-operatorが原因で、「are」を含む最初のチェックがすでに表示されている場合、2番目のチェック(「be」の場合)は実行されないことに注意してください$a

于 2013-03-01T14:06:03.090 に答える
5

別の方法: 長い文字列内の任意の長さの単語を検索します。

すべての strpos 回答から回答を選択していないため (ほとんどは 2 つの単語だけで機能するはずです。単語の制限を超えるこの関数を試してください。長い文字列からさまざまな長さの単語を見つけることができます (ただし、は strpos を使用しません. strpos を使用すると, 使用する || の数を決定するために単語の数を知る必要があると思います.またはループを使用する必要があります.このメソッドはそれをすべて排除し、コードを再利用するためのより柔軟な方法. コードは柔軟で、再利用可能で、動的であるべきだと思います. テストして、あなたが望むように動作するかどうかを確認してください!

function findwords($words, $search) {
    $words_array = explode(" ", trim($words));
    //$word_length = count($words_array);

    $search_array = explode(" ", $search);
    $search_length = count($search_array);

    $mix_array = array_intersect($words_array, $search_array);
    $mix_length = count($mix_array);

    if ($mix_length == $search_length) {
        return true;
    } else {
        return false;
    }
}



 //Usage and Examples

    $words = "This is a long string";
    $search = "is a";

    findwords($words, $search);

    // $search = "is a"; // returns true
    // $search = "is long at"; // returns false
    // $search = "long"; // returns true
    // $search = "longer"; // returns false
    // $search = "is long a"; // returns true
    // $search = "this string"; // returns false - case sensitive
    // $search = "This string"; // returns true - case sensitive
    // $search = "This is a long string"; // returns true
于 2013-03-01T14:38:48.833 に答える
2
$a = 'how are be';
if (strpos($a,'are') !== false || strpos($a,'be') !== false) {
   echo 'contains';
}
于 2013-03-01T14:08:29.617 に答える
1

試す:

if (strpos($a,'are') !== false || strpos($a,'be') !== false)
    echo 'what you want';
于 2013-03-01T14:06:07.540 に答える
1
if ((strpos($a,'are') !== false) || (strpos($a, 'be') !==false) {
    echo 'contains';
}
于 2013-03-01T14:06:15.913 に答える
1

これは、あなたの望むことですか?

if ((strpos($a,'are') !== false) || (strpos($a,'be') !== false)) {
    echo 'contains';
}
于 2013-03-01T14:06:20.137 に答える
1
if (strpos($a,'are') !== false || strpost($a, 'be') !== false) {
    echo "contains";
}

Brain Candy:最初のものがtrueを返す場合、2番目のチェックをスキップします。したがって、両方が当てはまる可能性があります。最初のものが偽の場合にのみ、2番目のものをチェックします。これは短絡と呼ばれます。

于 2013-03-01T14:07:11.390 に答える
1
if(strstr($a,'are') || strstr($a,'be')) echo 'contains';

ふむ、こんな感じ?

于 2013-03-01T14:08:16.700 に答える
0
if (strpos($a,'are') || strpos($a, 'be') {
echo 'contains';
}
于 2013-03-01T14:10:24.817 に答える