У меня есть это предложение:
$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, он показывает «Мари или Джош не в массиве», а Мари это массив (или должен быть).
Что случилось?
Решение с использованием 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";
}
У вас есть 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";
}
Первый параметр функции 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";
}
}
Вы неправильно использовали in_array (), в массиве для проверки первый параметр находится во втором параметре.
in_array(strtolower($words[0]), array_map('strtolower', $url_string)) && in_array(strtolower($words[1]), array_map('strtolower', $url_string))