Я пытаюсь уточнить свой массив с помощью 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]: пустая игла.
Может кто-нибудь указать, где я делаю это неправильно?
Вы можете попробовать использовать
$filteredArray = array_filter($json_output, function($obj) use ($keyword)
{
return strpos(strtolower($obj->title), strtolower($keyword));
});
потому что это входит в сферу функции, и вы определили его на более высоком уровне.
А также проверить с empty
как было предложено в комментариях.
Других решений пока нет …