【问题标题】:Check if variable starts with 'http'检查变量是否以“http”开头
【发布时间】:2011-05-24 02:36:32
【问题描述】:

我确信这是一个简单的解决方案,只是还没有找到我需要的。

使用 php,我有一个变量 $source。我想检查 $source 是否以'http'开头。

if ($source starts with 'http') {
 $source = "<a href='$source'>$source</a>";
}

谢谢!

【问题讨论】:

标签: php substring string-comparison


【解决方案1】:

使用substr:

if (substr($source, 0, 4) === 'http')

【讨论】:

    【解决方案2】:
    if (strpos($source, 'http') === 0) {
        $source = "<a href=\"$source\">$source</a>";
    }
    

    注意我使用===,而不是==,因为如果字符串不包含匹配项,strpos 返回布尔值false。零在 PHP 中是错误的,因此需要严格的相等性检查来消除歧义。

    参考:

    http://php.net/strpos

    http://php.net/operators.comparison

    【讨论】:

    • 你把干草堆和针混为一谈了。
    • 它比使用substr() 在视觉上更干净,但效率低下让我很恼火——它将扫描整个$source 以找到'http' 的位置。当然,99% 的情况下这无关紧要,但仍然......
    • 另请注意,您实际上引入了一个不在问题示例代码中的错误 - 您有 ' 而不是 "。我自己修复了这个问题。
    • 啊,我明白了。我实际上进行了测试:) strpos 花费了 0.0000003287 秒,而 substr 花费了 0.0000003881。但那是以“http”开头的。
    • 好吧,现在我真的被吓到了。如果没有开头的“http”,strpos 需要 0.0000003440 秒,而substr 需要 0.0000004285 秒。这是怎么回事?如果您想自己尝试,这里是测试代码:pastebin.com/LdYBbaS3
    【解决方案3】:

    你想要substr() 函数。

    if(substr($source, 0, 4) == "http") {
       $source = "<a href='$source'>$source</a>";
    }
    

    【讨论】:

    • 糟糕,必须是 0, 4,而不是 44 会得到一切 http :)
    • @Jonah:当你写评论时,我正在编辑它。 "Shit! I always do that. I always mess up some mundane detail." -- Michael Bolton
    • 你应该测试一下,我相信它会获取整个字符串 from 位置 4
    • @Itay:我已经修好了。我只是输入得太快了,以至于我没有注意到我错过了第二个参数。
    • @Agent:在 StackOverflow 上很匆忙。这个地方竞争非常激烈; StackExchange 在弄清楚如何激励人们方面做得非常出色。
    【解决方案4】:
    if(strpos($source, 'http') === 0)
        //Do stuff
    

    【讨论】:

    • 可能是检查字符串是否以 PHP 中的某个子字符串开头的最优雅的方法。
    • 洛尔乌特?你真的问为什么并声明strpos(我刚刚评论为最优雅的方式)更清楚?
    • @Robert:哦,呵呵,我看错了。我以为您是在说substr 解决方案更好。我的坏:)
    【解决方案5】:
    if(preg_match('/^(http)/', $source)){
    ...
    }
    

    【讨论】:

    • 解释您的解决方案会很有帮助。特别是 preg_match 函数和正则表达式。这将帮助其他人了解他们如何使用这些工具解决其他问题。
    【解决方案6】:

    从 PHP 8.0 开始,实现了 str_starts_with 方法:

    if (str_starts_with($source, 'http')) {
        $source = "<a href='$source'>$source</a>";
    } 
    

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 2021-10-28
      • 2017-06-23
      • 1970-01-01
      • 2020-01-07
      • 2012-07-03
      • 2016-04-10
      • 1970-01-01
      • 2012-02-05
      相关资源
      最近更新 更多