如果语句返回false,即使它不是

时间:2012-05-02 09:09:20

标签: php if-statement

我在这里有这个小片段,即使它满足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

您认为这是什么问题?

4 个答案:

答案 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'))