【问题标题】:PHP Compare two strings and display the difference while preserving their original character positionsPHP比较两个字符串并显示差异,同时保留它们的原始字符位置
【发布时间】:2021-10-12 18:35:54
【问题描述】:

为此,我自己一直在尝试并尝试在网上寻找答案一段时间。我想要实现的是比较两个字符串并将字符差异显示为整数,同时保留字符位置。基本上,我有一个问答应用程序,我需要将正确答案与给定答案进行比较。所以,例如:

$correct = 'Monday';
$answer =  'Manday';

在上面的例子中只有一个错误,所以在比较$correct$answer字符串时,我需要显示“1”。

我尝试使用strcmp,但这并没有给我正确的结果。对于上面的示例,执行strcmp($original, $answer) 会得到这个结果:3584。

另外,当使用similar_text 时,我没有得到我需要的结果。示例,当使用similar_text($original,$answer) 时,在使用上面的MondayManday 示例时,它给出了 5 个相似字符的预期结果,共 6 个。但是当我执行以下操作时,它仍然给我 1 作为结果,虽然它应该是 0(就我而言):

similar_text("Hello", "World") // The "o" is matched, but it is in the wrong position

所以,简而言之,我需要实现的就是这个。我有一个正确的答案,并且用户输入给出了答案。我想将用户给出的答案与原始正确答案进行比较。我想如何比较它们?我想比较两个字符串中每个字符的位置,对于所有不正确的字符,我想将错误字符总数作为整数返回。

更多示例:

$str1 = 'Monday';
$str2 = 'Mondayy';

上面应该返回'1',因为第二个字符串有一个额外的字符。所以总共有 1 个错误。

$str1 = 'Monday';
$str2 = 'Manday';

上面应该返回'1',因为第二个字符串有一个错误的字符。所以总共有 1 个错误。

$str1 = 'Hello';
$str2 = 'World';

上面应该返回'5',因为第二个字符串不匹配第一个字符串的任何字符在它们的位置。所以总共有 5 个错误。

【问题讨论】:

  • strcmp()返回的值没有任何意义。只有它的标志很重要。
  • 谢谢,我会更多地研究这些方法,以便更好地理解它们:)

标签: php


【解决方案1】:

您想使用levenshtein() 而不是similar_text()

similar_text() 只计算最长的匹配子串。 levenshtein() 计算需要替换多少字符才能匹配答案。

https://www.php.net/manual/en/function.levenshtein.php

【讨论】:

  • 我认为这正是我要找的,很高兴我忽略了这个...花了将近 30 分钟写了这个问题,哈哈,应该找到这个 ^^ 非常感谢!
  • 好吧,我不认为“levenshtein”会匹配很多搜索词,所以你没有找到它是可以理解的。如果这是正确答案,请标记为正确答案。
  • 我当然会,Stackoverflow 告诉我要等 5 分钟 :-))还有 PS。我之前确实在某个地方找到了levenshtein,但我认为我只是太快放弃了它。哦,好吧,你帮了我一堆:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 2018-03-26
相关资源
最近更新 更多