Как найти элементы в массиве, которые содержат заданную подстроку?

У меня 3 строки, я хотел бы получить только равные строки из них, что-то вроде этого:

$Var1 = "Sant"; $Array[] = "Hello Santa Claus"; // Name_1 $Array[] = "Santa Claus"; // Name_2 

Я хотел бы получить их обоих, потому что они соответствуют «Санту» .

С моим кодом я получаю только Name_2

 $len = strlen($Var1); foreach($Array as $name) { if ( stristr($Var1, substr($name, 0, $len))) { echo $name; } } 

Я понимаю, почему я только получаю Name_2 , но я не знаю, как решить эту ситуацию.

Ваш код будет работать, как показано ниже:

 foreach ($Array as $name) { if (stristr($name,$Var1)!==false) { echo $name; echo PHP_EOL; } } 

Выход: – https://eval.in/812376

Вы также можете использовать функцию php strpos () для этой цели

 foreach($Array as $name) { if ( strpos($name,$Var1)!==false) { echo $name; echo PHP_EOL; } } 

Выход: – https://eval.in/812371

Примечание. – В обеих функциях первым аргументом является строка, в которой вы хотите выполнить поиск подстроки. И второй аргумент – это сама подстрока.

вы можете использовать функцию strpos() php, чтобы определить, содержит ли строка подстроку или нет.

 $a = 'Sant'; foreach($Array as $name) { if (strpos($name, $a) !== false) { echo $name; } } 

Вы должны сделать это так. Вы можете использовать stristr но вам нужно перевернуть аргументы, потому что вы передаете неправильные аргументы. Первым аргументом должен быть haystack а второй – needle .

Попробуйте этот фрагмент кода здесь

 ini_set('display_errors', 1); $Var1 = "Sant"; $Array[] = "Hello Santa Claus"; // Name_1 $Array[] = "Santa Claus"; // Name_2 foreach ($Array as $name) { if (stristr($name,$Var1)!==false) { echo $name; echo PHP_EOL; } } 

Если вы хотите «фильтровать» ваш «массив», я рекомендую использовать функцию php, называемую array_filter() следующим образом:

Код:

 $Var1 = "Sant"; $Array=["Hello Santa Claus","Easter Bunny","Santa Claus"]; var_export(array_filter($Array,function($v)use($Var1){return strpos($v,$Var1)!==false;})); 

Вывод:

 array ( 0 => 'Hello Santa Claus', 2 => 'Santa Claus', ) 

array_filter() нуждается в массиве в качестве первого параметра и в поисковом выражении внутри use() . Часть возврата сообщает функции сохранить элемент, если true и удалить элемент, если false .

Преимущество этой функции над циклом foreach заключается в том, что никакие выходные переменные не должны быть объявлены (если вы этого не хотите). Он выполняет одно и то же действие.