0

この質問が以前に出されたことは知っていますが、提供されたソリューションを機能させることができませんでした。

配列内の単語が、指定された文字列内のいずれかの単語 (または単語の一部) と一致するかどうかを確認しようとしています。

現在、次のコードがありますが、配列の最初の単語に対してのみ機能します。残りは常に false を返します。

「入力」は「干し草の山」、「値」は「針」です。

function check($array) {
    global $input;
    foreach ($array as $value) {
            if (strpos($input, $value) !== false) {
                    // value is found
                    return true;
            } else {
                return false;
            }
    }   
}

例:

$input = "There are three";
if (check(array("one","two","three")) !== false) {
     echo 'This is true!';
} 

上記では、"There is one" の文字列は true を返しますが、"There are two" または "There are three" の文字列はどちらも false を返します。

正規表現を使用する必要のない解決策を使用できれば、それは素晴らしいことです。ありがとう!

4

6 に答える 6

1

ここでの問題は、チェックが常にの最初の項目の後に戻ること$arrayです。一致するものが見つかった場合はを返しfalse、一致しない場合はを返しますtrue。そのreturnステートメントの後、関数はで実行され、残りの項目はチェックされません。

function check($array) {
    global $input;
    foreach($array as $value) {
        if(strpos($input, $value) !== false) {
            return true;
        }
    }
    return false;
}

上記の関数は、一致が見つかった場合にのみtrueを返し、。のすべての値を調べた場合はfalseを返します$array

于 2012-05-15T07:16:12.960 に答える
0

ここでの問題は、returnステートメントで関数から抜け出していることです。したがって、uは常に最初の比較の後に切り取られます。

于 2012-05-15T07:16:56.317 に答える
0

strpos(); ここでは完全に間違っています。単に試してみてください

if ($input == $value) {
    // ...
}

そして経由

if ($input === $value) { // there are THREE of them: =
    // ...
}

変数のTYPEが同じかどうかを確認することもできます(文字列、整数など)

より専門的な解決策は

 in_array();

キーまたは値の存在をチェックします。

于 2012-05-15T07:09:05.413 に答える
0

コードが機能しない理由は、配列をループしているためですが、取得した結果を保存していないため、最後の結果のみが「カウント」されます。次のコードでは、結果を という変数に渡しました$output

function check($array) {
    global $input;
    $output = false;
    foreach ($array as $value) {
        if (strpos($input, $value) != false) {
            // value is found
            $output = true;
        } 
    }
    return $output;
}

次のように使用できます。

$input = "There are two";
$arr = array("one","two","three");
if(check($arr)) echo 'this is true!';
于 2012-05-15T07:27:52.563 に答える
0

の各反復で戻っている$arrayため、一度だけ実行されます。または を使用して、 に存在するかどうstristrstrstrを確認できます。$value$input

このようなもの:

function check($array) {
    global $input;
    foreach ($array as $value) {
        if (stristr($input, $value)) {
            return true;
        }
    }
    return false;
}

これは、配列の各要素をループしtrue、一致が見つかった場合は戻ります。一致しない場合は、ループの終了後に false を返します。

個々のアイテムが存在するかどうかを確認する必要がある場合は$input、次のように少し異なることを行う必要があります。

function check($array) {
    global $input;
    $returnArr = array();
    foreach ($array as $value) {
        $returnArr[$value] = (stristr($input, $value)) ? true : false;
    }
    return $returnArr;
}


echo '<pre>'; var_dump(check($array, $input)); echo '</pre>';

// outputs

array(3) {
  ["one"]=>
  bool(false)
  ["two"]=>
  bool(false)
  ["three"]=>
  bool(true)
}
于 2012-05-15T07:18:01.647 に答える
0

配列値を比較するには、in_array() を使用する必要があります。

function check($array) {
    global $input;
    foreach ($array as $value) {


        if (in_array($value,$input))
      {
        echo "Match found"; 
        return true;
      }
    else
      {
        echo "Match not found";
        return false;
      }
    }   
}
于 2012-05-15T07:19:16.563 に答える