我有一个数组:
$blacklist = array("asdf.com", "fun.com", "url.com");
我有一个输入字符串:
$input = "http://asdf.com/asdf/1234/";
我正在尝试查看string $ input是否与$ blacklist中的任何值匹配。
我如何做到这一点?
答案 0 :(得分:3)
对于parse_url()
来说,这听起来很不错:
<?php
$blacklist = array("asdf.com", "fun.com", "url.com");
$input = "http://asdf.com/asdf/1234/";
$url = parse_url($input);
echo (in_array($url['host'], $blacklist) ? '(FAIL)' : '(PASS)') . $url ['host'];
?>
<强>输出:强>
(FAIL)asdf.com
答案 1 :(得分:1)
可能有一种方式(但我没有衡量绩效):
$san = preg_replace($blacklist, '', $input);
if($san !== $input) {
//contained something from the blacklist
}
如果输入中不包含后备列表中的任何字符串,则字符串将保持不变。
另一个,可能更适合,绝对更有效的方法可以是extract the host part from the input并将黑名单创建为关联数组:
$blacklist = array(
"asdf.com" => true,
"fun.com" => true,
"url.com" => true
);
然后用O(1)
进行测试:
if($blacklist[$host]) {
//contained something from the blacklist
}
答案 2 :(得分:1)
使用foreach可能是您尝试实现的最佳解决方案。
$blacklist = array("/asdf\.com/", "/fun\.com/", "/url\.com/");
foreach($blacklist as $bl) {
if (preg_match($bl, $input)){return true;}
}
答案 3 :(得分:0)
in_array是没用的,因为它会搜索确切的字符串。
你必须循环遍历数组并搜索它
foreach($str in $blacklist)
{
if( stristr($input, $str ) )
{
//found
}
}
答案 4 :(得分:0)
此代码应该有效:
$blacklist = array("asdf.com", "fun.com", "url.com");
$input = "http://asdf.com/asdf/1234/";
if (in_array(parse_url($input,PHP_URL_HOST),$blacklist))
{
// The website is in the blacklist.
}