【问题标题】:Better way of comparing substrings than a giant if loop比巨大的 if 循环更好的比较子字符串的方法
【发布时间】:2015-04-15 00:19:59
【问题描述】:

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

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

    • ShowForum
    • Amex
    • Owners
    • ManagementCenter
    • WeatherUnderground
    • MapPopup
    • asp
    • pages
  3. 如果有base url,则返回true,但不匹配子字符串,否则返回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;  
    }

例子:

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

在我的例子中它被称为:

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

随着时间的推移,被禁止的子字符串列表变大。 那么,有没有比 大循环更好的方法来匹配可变长度的子字符串?

提前致谢!

【问题讨论】:

  • 大局是什么?网址来自哪里?他们在这里被使用了吗?

标签: if-else php if-statement substr


【解决方案1】:

这应该适合你:

(这里我只是用parse_url() 解析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;
    }

?>

【讨论】:

  • 如果页面url是/pages/aboutus.html怎么办?
  • @Quill 问题你想做什么?你还只想比较第一个文本吗? pages 在这里?
  • 我想比较 url 是否适合指定的文件夹。这意味着因为它在/pages 目录中,所以它将是return false
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2011-10-19
  • 2014-05-13
相关资源
最近更新 更多