У меня 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 заключается в том, что никакие выходные переменные не должны быть объявлены (если вы этого не хотите). Он выполняет одно и то же действие.