【问题标题】:PHP: Compare the start of two stringsPHP:比较两个字符串的开头
【发布时间】:2013-04-03 14:08:46
【问题描述】:

我想知道是否有一种简单的方法可以在 PHP 中比较两个字符串并从字符串的开头返回它们共有的字符数。

一个例子:

$s1 =  "helloworld";
$s1 =  "hellojohn";

这两个字符串都以 'hello' 开头,这意味着两个字符串的前 5 个字符相同。 '5' 是我在比较这两个字符串时想要得到的值。

在不将两个字符串作为数组相互比较的情况下,是否有一种计算速度快的方法?

【问题讨论】:

  • 据我所知,我不认为有这样的内置函数。很可能,您必须自己制作。

标签: php string string-comparison


【解决方案1】:
function commonChars($s1, $s2) {
    $IMAX = min(strlen($s1), strlen($s2));
    for($i = 0; $i < $IMAX; $i++)
        if($s2[i] != $s1[i]) break;
    return $i;
}

【讨论】:

  • 您应该在循环之前预先计算min(strlen($s1), strlen($s2)),这样它就不会在每次迭代时重新计算。
  • 谢谢 joeframbach,你说得对。已更正。
【解决方案2】:

如果字符串真的很大,那么我会编写自己的二进制搜索。类似于我刚刚梦想的完全未经测试的代码。

function compareSection($start, $end, $string1, $string2) {
  $substr1 = substr($string1, $start, $end-$start);
  $substr2 = substr($string2, $start, $end-$start);
  if ($substr1 == $substr2) return $end;
  if ($firstMatches = compareSection(0, $end/2, $substr1, $substr2)) {
    return $start + $firstMatches;
  if ($lastMatches = compareSection($end/2, $end, $substr, $substr2)) {
    return $start+$lastMatches;
  }
}

【讨论】:

    【解决方案3】:

    如果您希望获得的字符串的相似性,而不仅仅是相同字符的实际数量,则有两个函数:strcmplevenshtein。也许它们比您在这个问题中所要求的更适合您的目标。

    【讨论】:

    • 这很可能是他们真正想要的。
    【解决方案4】:

    据我所知,我认为没有这样的内置函数。很可能,您必须自己制作。

    不应该太难。只需按索引按索引循环两个字符串,直到找不到不匹配的匹配项。不管你走多远,答案就是答案。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2014-03-14
      相关资源
      最近更新 更多