【问题标题】:PHP strcmp questionPHP strcmp 问题
【发布时间】:2011-08-28 14:59:21
【问题描述】:

我一直在编写一个网络爬虫程序,我正在尝试将以前的 url(最后访问的站点)与当前的 url(当前或下一个要访问的站点)进行比较。为此,我使用了 strcmp 函数,例如:

array_push($currentsite, $source);
  if (strcmp($currentsite[2], $currentsite[3])==0){
    echo "redundancy";
    crawlWebsite($originalsource);  
    }

其中当前站点是先前站点和当前站点的数组。我每次都在更大的程序中循环遍历新站点。

但是,每次我在当前站点和新站点上运行 strcmp 时,即使网址相同,我也会得到 -1 的结果。有谁知道为什么会一直发生这种情况?

谢谢。

【问题讨论】:

  • 你能给我们一个示例代码吗?

标签: php web-crawler strcmp


【解决方案1】:

即使网址相同,

如果两个输入字符串相同,则 strcmp 返回 0,因此您的输入字符串不相同。检查 $currentsite 的内容。

顺便说一句,strcmp($a, $b) == 0 可以有效地重写为$a == $b

【讨论】:

  • 否 - Strcmp($a, $b) 与 $a == $b 不同。后者会做奇怪的类型改变。一个很好的例子是:'1e3' == '1000'。有时使用 == 很有用,但可能不与字符串一起使用。我刚刚注意到原来的评论是5年前的,但当时是错误的,现在是错误的:(。
【解决方案2】:

您正在测试的网站可能包含使其独一无二的内容,例如当前时间或用于保存会话的隐藏 ID 或类似内容。

无论如何,这将导致strcmp 不返回 0。最好有一个函数为您提供一定百分比的相等性,这样您就可以定义一个级别,高于该级别您认为两个站点相同。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多