4

私はたくさんの検索をしましたが、これを理解することはできません。

私はこのような配列を持っています:

$array = array(cat => 0, dog => 1);

次のような文字列があります。

I like cats.

文字列が配列内のキーと一致するかどうかを確認したい。私は次のことを試みますが、明らかにうまくいきません。

array_key_exists("I like cats", $array)

特定の時間にランダムな文字列を取得できると仮定すると、どうすればこのようなことができますか?

擬似コード:

array_key_exists("I like cats", *.$array.*)
//The value for cat is "0"

「猫」が何らかの形で存在するかどうかを確認したいことに注意してください。それは、猫、キャシー、さらには vbncatnm のようなランダムな文字にすることもできます。mysql データベースから配列を取得していますが、どの ID が猫か犬かを知る必要があります。

4

3 に答える 3

7

キーに正規表現を使用できます。したがって、文字列のいずれかの単語がキーに等しい場合$foundは、 true. $key必要に応じて変数に保存できます。preg_match関数を使用すると、正規表現をテストできます。

$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
    //If the key is found in your string, set $found to true
    if (preg_match("/".$key."/", "I like cats")) {
        $found = true;
    }
}

編集 :

コメントで述べたように、strposの方が優れている可能性があります。したがって、同じコードを使用して、preg_match を置き換えるだけです。

$keys = array_keys($array);
$found = false;
foreach ($keys as $key) {
    //If the key is found in your string, set $found to true
    if (false !== strpos("I like cats", $key)) {
        $found = true;
    }
}
于 2016-10-22T19:03:08.950 に答える
1

これは、あなたがやろうとしていることを達成するのに役立ちます:

$array         = array('cat' => 10, 'dog' => 1);

$findThis      = 'I like cats';

$filteredArray = array_filter($array, function($key) use($string){

    return strpos($string, $key) !== false;

}, ARRAY_FILTER_USE_KEY);

array_filter 関数をクロージャー/匿名関数と共に使用すると、1 レベルのインデントが維持されるため、foreach ループよりもはるかに洗練された方法であることがわかりました。

于 2016-10-22T19:47:18.230 に答える