我在这里有这个小片段,即使它满足false
语句,也会返回if
。
$urls = $_POST['links'];
trim($urls);
$urls = explode("\r\n",$urls);
foreach($urls as $url){
trim($url);
if(strpos($url,'http://') === false)
$url = 'http://'.$url;
$parse = parse_url($url, PHP_URL_HOST);
if(($parse != 'site.com') || ($parse != 'www.site.com')) //problem here
echo 'false:'.$parse.'<br>';
else
echo 'true:'.$parse;
}
输入来自textarea:
http://site.com
site.com
http://www.site.com
www.site.com
输出:
true:site.com
true:site.com
false:www.site.com
false:www.site.com
您认为这是什么问题?
答案 0 :(得分:4)
我不确定你的意图,但以下几行肯定是错误的:
if(($parse != 'site.com') || ($parse != 'www.site.com')) //problem here
这总是会返回true,因为如果parse不是'site.com'就是这样,但如果parse不是'www.site.com'也是如此,因为它不能同时是'www.site.com' ,它必须永远是真的。你的意思是&amp;&amp;而不是||?即,逻辑AND而不是逻辑OR?
if(($parse != 'site.com') && ($parse != 'www.site.com'))
编辑:实际上,如果你在问题中提出的是所希望的行为,即对于site.com是真的而对于www.site.com是假的,那么你只需要:
if ($parse == 'site.com')
{
echo 'false:'.$parse;
}
else if ($parse == 'www.site.com')
{
echo 'false:'.$parse;
}
或许这不是你想要的......
答案 1 :(得分:1)
考虑你在第二个if语句中使用的逻辑。无论$parse
是什么,您都将永远属于if
分支。 (也就是说,你永远不会落入else
分支。)
考虑以下备选方案:
// "Not A AND Not B"
if(($parse != 'site.com') && ($parse != 'www.site.com'))
// ...
// "Neither A nor B"
if(!(($parse == 'site.com') || ($parse == 'www.site.com')))
// ...
// "Either A or B"
if(($parse == 'site.com') || ($parse == 'www.site.com'))
echo 'true:'.$parse;
else
echo 'false:'.$parse.'<br>';
// Note here we also swapped the two branches.
答案 2 :(得分:0)
将if行更改为:
if(($parse != 'site.com') && ($parse != 'www.site.com'))
答案 3 :(得分:0)
替换此行:
if(($parse != 'site.com') && ($parse != 'www.site.com'))