массив php выводит значения, содержащие p1

привет у меня есть массив из 20/30 предметов большой.

мне нужно, чтобы он выкинул цикл и вывел на экран только элементы с текстом p1 в них.

массив выглядит так

    "lolly","lollyp1","top","topp1","bum","bump1","gee","geep1"

и так далее

я пытался использовать что-то вроде этого

    foreach ($arr as $value) {
$needle = htmlspecialchars($_GET["usr"]);
$ret = array_keys(array_filter($arr, function($var) use ($needle){
return strpos($var, $needle) !== false;
}));

но все это дает мне пустую страницу или 1с

как я могу получить эхо-элементы с p1 в них?

0

Решение

Попробуй это:

$needle = htmlspecialchars($_GET["usr"]);
$rtnArray = array();
foreach ($arr as $value) {
$rtnArray = strpos($value,$needle);
};
return $rtnArray;

Если вы пытаетесь написать прямо на страницу, то теряете $ rtnarray и echo:

$needle = htmlspecialchars($_GET["usr"]);
foreach ($arr as $value) {
echo strpos($value,$needle);
};

Чтобы показать только те, у которых есть «p1», отфильтруйте:

$needle = htmlspecialchars($_GET["usr"]);
foreach ($arr as $value) {
$temp = strpos($value,$needle);
if($temp > 1){
echo $value;
}
};
0

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

Использование прямого цикла со сравнением строк было бы простым способом:

$needle = $_GET['usr'];
$matches = array();
foreach ($arr as $key => $value) {
if (strpos($value, $needle) !== false) {
$matches[] = $key;
}
}

Использование array_filter() в вашем посте должен работать в ожидании версии PHP, которую вы используете. Попробуйте обновить, чтобы использовать отдельную / определенную функцию:

function find_needle($var) {
global $needle;
return strpos($var, $needle) !== false;
}
$ret = array_keys(array_filter($arr, 'find_needle'));

Пример Codepad второго образца

0