Как найти подстроку в массиве слов, и собрать обратно в массив
У меня есть определенный массив например имен. Необходимо написать функцию с двумя аргументами. Первый аргумент - это массив имен, а второй аргумент - это, например, буква "А". Нужно перевести массив в строку и найти те слова, в которых содержится второй аргумент. И обратно собрать из получившихся слов массив.
<?php
$array = ["Женя", "Леша", "Никита", "Олег", "Давид"];
$testReplaceString = "а";
$array_string = implode(" | ", $array);
$findString = strpos($array_string, $testReplaceString);
if ($findString === false) {
echo "Строка '$testReplaceString' не найдена в строке '$array_string'";
} else {
echo "Строка '$testReplaceString' найдена в строке '$array_string'";
}
Но данный код, который я написал, выдает мне, что он нашел это в строке. А мне нужно, чтобы вывел те слова, в которых найден тот или иной символ и собрать это в новый массив. Помогите, пожалуйста. Пыху изучаю только второй день.
Ответы (1 шт):
Если я правильно понял, Вам достаточно создать новый отфильтрованный массив. Для этой цели хорошо подходит array_filter.
Не совсем понимаю, для чего необходимо переводить в строку... Если в качестве первого аргумента будет строка, тогда придется внутри метода делить ее по сепарату с помощью explode.
Для PHP 7.4+:
$array = ["Женя", "Леша", "Никита", "Олег", "Давид"];
$testReplaceString = "а";
function MyFinder($array, $needle){
return array_filter($array, fn($v) => strpos($v, $needle) !== FALSE);
}
echo '<pre>';
print_r(MyFinder($array, $testReplaceString ));
echo '</pre>';
Для PHP 5.3+:
$array = array("Женя", "Леша", "Никита", "Олег", "Давид");
$testReplaceString = "а";
function MyFinder($array, $needle){
return array_filter($array, function($v) use($needle){
return strpos($v, $needle) !== FALSE;
});
}
echo '<pre>';
print_r(MyFinder($array, $testReplaceString ));
echo '</pre>';
Работающий пример тут