2017-01-19 4 views
1

У меня есть это предложение:найти слово в предложении в PHP

$newalt="My name is Marie"; 

Я хочу, чтобы включить страницу, если мари или мистификация найдено:

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

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

if(!in_array($url_string, $words)){ 
    echo "marie or josh are not in array"; 
} 

проблема, когда я бегу этот php показывает, что «marie или josh не находятся в массиве», а marie - это массив (или должен быть). Что не так?

+0

'in_array' чувствителен к регистру. «Мари» - это не то же самое, что «мари». – cteski

+0

@cteski, даже если я положил 'M'arie, он тоже не работает –

ответ

1

Вы неправильно использовали in_array(), в массиве, чтобы проверить первый параметр во втором параметре.

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() не принимает массив в качестве иглы. Чтобы преодолеть это, вы можете использовать что-то вроде array_diff():

$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 функции является массивом. Ваш массив $ 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()' will. например 'if (strpos ($ newalt, $ word) === false)' – GentlemanMax