2017-01-19 9 views
1

で文章中の単語を見つけますこのPHPは "marieまたはjoshは配列ではない"と表示し、marieは配列です(またはそうでなければなりません)。 どうしたのですか?私はこの文を持っているPHP

+0

'in_array'は大文字と小文字が区別されます:

たぶん、このような何かを試してみてください。 「マリー」は「マリー」と同じではありません。 – cteski

+0

@cteskiもし私が 'M'arieを置いてもそれはうまくいきません –

答えて

1

array_intersectarray_map関数を使用して溶液:あなたが誤って最初のパラメータをチェックするために、アレイ内の、in_array()を使用

$newalt = "My name is Marie"; 
$words = ["marie", "josh"]; 

$url_string = explode(" ", $newalt); 

if (empty(array_intersect($words, array_map("strtolower", $url_string)))) { 
    echo "marie or josh are not in array"; 
} 

http://php.net/manual/en/function.array-intersect.php

1

は2番目のパラメータです。

in_array(strtolower($words[0]), array_map('strtolower', $url_string)) && in_array(strtolower($words[1]), array_map('strtolower', $url_string)) 
+0

downvoteの理由??? –

1

あなたには2のエラーがあります。まず、in_array()では大文字と小文字が区別されます。乾草をすべて小文字にする必要があります。第二に、in_array()は針として配列を受け入れません。

$newalt="My name is Marie"; 
$words = array("marie", "josh"); 

$url_string = explode(" ", strtolower($newalt)); 

if(count(array_diff($words, $url_string) == count($words)){ 
    echo "marie or josh are not in array"; 
} 
1

in_array関数の最初のパラメータが配列である:これを克服するために、あなたはarray_diff()のようなものを使用することができます。あなたの$ words配列は配列ではなく文字列で埋められます。

$words = array("marie", "josh"); 

$urlStrings = explode(" ", $newalt); 

foreach ($urlStrings as $urlString) { 
    if(!in_array($urlString, $words)){ 
     echo "marie or josh are not in array"; 
    } 
} 
+0

とにかく 'foreach'ループを使うつもりなら、' strpos() 'は' in_array() 'よりもスケールが良くなります。例えば'if(strpos($ newalt、$ word)=== false)' – GentlemanMax

関連する問題