过滤数组时如何在php中使用strpos()

时间:2014-11-21 04:57:06

标签: php strpos array-filter

我正在尝试使用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]:空针。

有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用

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

因为它在函数范围内,并且您在更高级别定义它。

并按照评论中的建议检查empty