Как использовать strpos () в php при фильтрации массива

Я пытаюсь уточнить свой массив с помощью strpos (), он работает нормально, когда я вручную задаю строку, но не получается, если я передаю значение с помощью переменной.

Ниже код работает нормально.

  $filteredArray = array_filter($json_output, function($obj)
{
return strpos(strtolower($obj->title), strtolower("Something"));
});

Приведенный ниже код не работает

    <?php
$url = sprintf(
'%s://%s/%s',
isset($_SERVER['HTTPS']) ? 'https' : 'http',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
);
$parts = parse_url($url);
parse_str($parts['query'], $query);

if (!empty($query['key'])) {
$keyword = $query['key'];
$jsonurl = "url";
$json = file_get_contents($jsonurl);
$json_output = json_decode($json);
$filteredArray = array_filter($json_output, function($obj)
{
return strpos(strtolower($obj->title), strtolower($keyword));
});
echo json_encode($filteredArray);

}
else
{
echo "Gods must be crazy";
}
?>

выдает следующую ошибку — Предупреждение: strpos () [function.strpos]: пустая игла.

Может кто-нибудь указать, где я делаю это неправильно?

0

Решение

Вы можете попробовать использовать

$filteredArray = array_filter($json_output, function($obj) use ($keyword)
{
return strpos(strtolower($obj->title), strtolower($keyword));
});

потому что это входит в сферу функции, и вы определили его на более высоком уровне.

А также проверить с empty как было предложено в комментариях.

2

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

Других решений пока нет …