Как проверить, находятся ли части строки в массиве, но в более разумной версии?

#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 ?