как я могу отфильтровать массив и вернуть совпадения

Я хочу вернуть предметы, которые «похожи» на что-то другое.
Я попытался array_filter, но я не могу использовать его правильно.

Вот что я попробовал.
желаемый выход

one.php2000565, one.php999.php.
Array ([0] =>
one.php2000565 [1] => two.php [2] => three.php [3] => one.php999.php [4] => four.php)

$search_text = 'one.php';
array_filter($array, function($a) use ($search_text) {
return ( strpos($a, $search_text) !== false );
});

Array([0] => one.php2000565[1] => two.php[2] => three.php[3] => one.php999.php[4] => four.php)

$search_text = 'one.php';
array_filter($array, function($a) use ($search_text) {
return ( strpos($a, $search_text) !== false );
});

2

Решение

ты можешь попробовать array_filter:

$search_text = 'one.php';

array_filter($yourArray, function($el) use ($search_text) {
return ( strpos($el, $search_text) !== false );
});
1

Другие решения

$res = array_filter($files, function($files) use ($search_program) {
return ( strpos($files, $search_program) !== false );
});
print_r($res);
1

Вы можете попробовать следующее решение: —

$example    = array([0] => one.php2000565[1] => two.php[2] => three.php[3] => one.php999.php[4] => four.php);
$searchword = 'one.php';
$matches    = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });

Это может помочь вам.

0

Вы не назначаете результат array_filter, РНР array_filter
возвращает измененный массив. Так что просто используйте:

$array = array_filter($array,
function($a) use ($search_text) {
return (
strpos($a, $search_text) !== false
);
}
)
0

Как я уже говорил, код OPs работает нормально с array_filter просто нужно назначить отфильтрованное значение в переменной. Но мое решение является альтернативой array_filter вместо этого вы можете использовать preg_grep как

$res = preg_grep("/$search_text/",$array);
print_r($res);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector