Вообще array_reduce
применяется именно для свертки массива (может, не совсем правильный термин, сейчас не помню) - получения одного значения из всего массива - но здесь тоже сойдет, хоть это и неправильно:
<?php
$data = ['Иванов_Александр', 'Иванов_Пётр', 'Петров_Иван', 'Роман_Ракзин'];
$reduced = array_reduce($x, function ($result, $input) {
if (!is_array($result)) {
$result = array();
}
if (mb_stripos($input, 'Ив', 0, 'UTF-8') !== false) {
$result[] = $input;
}
return $result;
});
var_dump($reduced);
//
array(3) {
[0] =>
string(31) "Иванов_Александр"
[1] =>
string(21) "Иванов_Пётр"
[2] =>
string(21) "Петров_Иван"
}
Проблемы будут, если ив
надо задавать динамически, придется либо проставлять параметры Closure (это вообще возможно?), либо использовать use, либо все-таки делать то же самое через foreach.