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

У меня есть определенный массив например имен. Необходимо написать функцию с двумя аргументами. Первый аргумент - это массив имен, а второй аргумент - это, например, буква "А". Нужно перевести массив в строку и найти те слова, в которых содержится второй аргумент. И обратно собрать из получившихся слов массив.

<?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 шт):

Автор решения: Node_pro

Если я правильно понял, Вам достаточно создать новый отфильтрованный массив. Для этой цели хорошо подходит 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>';

Работающий пример тут

→ Ссылка