привет у меня есть массив из 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 в них?
Попробуй это:
$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;
}
};
Использование прямого цикла со сравнением строк было бы простым способом:
$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 второго образца