比巨型if循环更好地比较子串的方法

时间:2015-04-15 00:19:59

标签: php if-statement substr

好吧,在我的代码中,我有一个URL,它会传递给我的函数:testURL($url),按顺序:

  1. 测试base url是否为域名('http://www.example.com'
  2. 测试各种子字符串:

    • ShowForum
    • Amex
    • Owners
    • ManagementCenter
    • WeatherUnderground
    • MapPopup
    • asp
    • pages
  3. 如果truebase url但与子字符串不匹配,则返回return false;,否则function testURL($url){ if ((substr($url, 0, 23) == "http://www.example.com/") && (substr($url, 23, 3) != "asp") && (substr($url, 23, 4) != "Amex") && (substr($url, 23, 5) != "pages") && (substr($url, 23, 16) != "ManagementCenter") && (substr($url, 23, 16) != "Owners") && (substr($url, 23, 9) != "ShowForum") && (substr($url, 23, 8) != "MapPopup") && (substr($url, 23, 18) != "WeatherUnderground")) { return false; } else { return true; }

  4. 这是代码

    testURL('http://www.example.com/Amex'); --> returns true
    testURL('http://www.example.com/PayPal'); --> returns false
    

    示例:

    if (testURL('http://www.example.com/Visa')){
      return;
    }
    

    在我的案例中,它被称为:

    {{1}}

    随着时间的推移,被禁止的子串列表变大。 那么,是否有更好的方法来匹配变量长度的子串,然后匹配巨型循环?

    提前致谢!

1 个答案:

答案 0 :(得分:1)

这应该适合你:

(这里我只用parse_url()解析网址,然后检查主机是否匹配,以及路径是否在in_array()数组中

<?php

    function testURL($url) {
        $parsed = parse_url($url);
        if($parsed["host"] == "www.example.com" && !in_array(explode("/", $parsed["path"])[1], ["asp", "Amex", "WeatherUnderground", "MapPopup", "ShowForum", "Owners", "ManagementCenter", "pages"]))
            return false;
        else
            return true;
    }

?>