Php 按正确的顺序在字符串数组中查找公共字符

Php 按正确的顺序在字符串数组中查找公共字符,php,string,wildcard,Php,String,Wildcard,我花了几天的时间在一个函数上,以正确的顺序获取字符串数组中的公共字符,从而创建一个通配符 这里有一个例子来解释我的问题。我做了大约3个函数,但当每个字母的绝对位置不同时,我总是有一个bug 让我们假设“+”是“通配符字符”: 应返回: $wildcard='+8ca13+0$5'; 在本例中,棘手的是$array[2]比其他字符多1个字符 其他例子: Array( 0 => "case1b25.occHH&FmM", 1 => "case11b25.occHH&Fm

我花了几天的时间在一个函数上,以正确的顺序获取字符串数组中的公共字符,从而创建一个通配符

这里有一个例子来解释我的问题。我做了大约3个函数,但当每个字母的绝对位置不同时,我总是有一个bug

让我们假设“+”是“通配符字符”:

应返回:

$wildcard='+8ca13+0$5';
在本例中,棘手的是
$array[2]
比其他字符多1个字符

其他例子:

Array(
0 => "case1b25.occHH&FmM",
1 => "case11b25.occHH&FmM",
2 => "case12b25.occHH&FmM",
3 => "case20b25.occHH&FmM1");
应返回:

$wildcard='case+b25.occHH&FmM+';
在本例中,棘手的部分是:
-重复字符,如“删除”部分中的1->11,以及公共部分中的c->cc
-“要删除”部分中$array[2]和[3]中的“2”字符不在同一位置
-最后一个字符串末尾的“1”字符

我真的需要帮助,因为我找不到这个函数的解决方案,它是我应用程序的主要部分

提前谢谢,请不要犹豫提问,我会尽快回答


Mykeul

似乎您想用一组示例字符串创建类似正则表达式的东西。 总的来说,这可能相当棘手。找到此链接,不确定是否相关:

另一方面,如果您只需要一个表示“0个或多个字符”的特定通配符,那么应该会容易得多。算法计算两个字符串之间的相似性。通常只需要结果,但在您的情况下,差异的位置很重要。您还需要对N个字符串进行调整

所以我建议你研究一下这个算法,希望你能找到一些解决问题的方法(至少你能练习一下文本算法和动态编程)

PHP中的Heres算法: _http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#PHP

您可能还希望搜索“diff”的PHP实现。 主代码:
步骤1:按长度(从短到长)将字符串排序到数组[]
步骤2:比较数组[0]和数组[1]中的字符串以获得$temp_通配符
步骤3:将数组[2]中的字符串与$temp_通配符进行比较,以创建新的$temp_通配符
步骤4:继续将每个字符串与$temp_通配符进行比较-最后一个$wildcard是您的$temp_通配符

好了,现在我们来讨论如何比较两个字符串以返回通配符字符串的问题

子程序代码: 逐字符比较字符串,在比较不匹配时将通配符替换为返回值

要处理不同长度的问题,请对第二个字符串较长且有偏移量的每个字符额外运行此比较。(比较string1[x]和string2[x+偏移量])对于每个返回的字符串,计算通配符的数量。子例程应返回通配符数最少的答案


祝你好运

它不会杀了你,所以没必要这么大声喊叫;-)嗯,好的。。。这是关于“HEEELLPPP”的编辑部分。。。它不会杀了我,是的,但我真的,真的,需要让它工作…很高兴你改变了它!现在读起来更好:-)你好,谢谢你的awnser,但是:-我不认为我可以使用正则表达式,因为我不知道字符串中字符的类型,也不知道我必须删除的od字符的类型-我读到了Levenshtein距离,但它告诉了“差异的数量”,而不是区别是什么。。。没有秩序最后一个链接显示了一个PHP文件下载链接,该链接不再工作,注释只提供脚本的一部分。我真的需要保留普通的角色和订单。你好,谢谢你的awnser!这是一个很好的算法,我想今晚我会试试。还有一种情况我无法匹配:数组(“abcd”,“bcde”);=>长度相同,但我应该得到“+bcd+”。这仍然是一个非常好的算法,比我的好。麦基尔
$wildcard='case+b25.occHH&FmM+';