#php #arrays
#php #массивы
Вопрос:
Я пишу простой код, который определяет, найдено ли хотя бы одно слово строки в массиве, как показано ниже:
Массив
$the_array= array("first","second","third");
Код
if(0 < count(array_intersect(explode(' ', $input_string), $the_array))) {
echo 'found';
break;
} else {}
Итак, если мой input_string
является
$input string = "hello here is my first sentence";
или
you get now my second question
или
find my first and second sentence here
код будет повторяться found
.
Мое желаемое решение — проверить строки типа find my first and second sentence here
для массива, подобного приведенному ниже
$the_array= array("first second","third");
и эхо found
. Но поскольку между строкой есть слова first and second
, это не сработает.
Есть ли какой-либо способ добиться чего-то подобного? Более «интеллектуальная» версия?
Ответ №1:
Не уверен, что это лучшее решение или нет, но это может быть одним из решений вашей проблемы. Решение таково:
-
Сначала используйте
explode()
функцию для разделения вашей$input_string
строки.$string_components = explode(' ', $input_string);
-
Поддерживайте логическое значение
$flag
, чтобы проверить, найдена ли часть (ы) строки в массиве или нет.$flag = false;
-
Выполните цикл по
$the_array
массиву и на каждой итерации проверяйте, присутствует ли элемент поиска из массива (одно слово или несколько слов) в исходной строке или нет.foreach($the_array as $search_val){ $search_components = explode(" ", $search_val); if(count($search_components) == count(array_intersect($search_components, $string_components))){ $flag = true; break; } }
-
Наконец, проверьте, найдены ли части строки в массиве или нет.
if($flag){ echo 'found'; }else{ echo 'not found'; }
Вот пример:
$the_array= array("first second","third");
$input_string = "find my first and second sentence here";
$string_components = explode(' ', $input_string);
$flag = false;
foreach($the_array as $search_val){
$search_components = explode(" ", $search_val);
if(count($search_components) == count(array_intersect($search_components, $string_components))){
$flag = true;
break;
}
}
if($flag){
echo 'found';
}else{
echo 'not found';
}
Ответ №2:
Отредактируйте с помощью некоторого тестирования 😉
$stringArray = explode(" ","hello here is my first second sentence");
$compareArray = ["first","second","third"];
echo count(array_diff($stringArray,$compareArray)) != count($stringArray) ? 'found' :'not found' ;
Комментарии:
1. Я не думаю, что вы хотите
array_diff_key
, но, возможноarray_diff
?