массивы — найти слово в предложении в переполнении стека

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

$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, он показывает «Мари или Джош не в массиве», а Мари это массив (или должен быть).
Что случилось?

1

Решение

Решение с использованием array_intersect а также array_map функции:

$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() чувствителен к регистру. Вы должны сделать стог сена все строчными в первую очередь. Во-вторых, 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";
}
}
1

Вы неправильно использовали in_array (), в массиве для проверки первый параметр находится во втором параметре.

in_array(strtolower($words[0]), array_map('strtolower', $url_string)) && in_array(strtolower($words[1]), array_map('strtolower', $url_string))
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector