2012-08-17 83 views
4

我想创建一个方法来比较两个句子并返回使它们不同的单词。字符串差异php

例如

灰瓦100×200的厨房地板

灰瓦300 X 600厨房地板

差是 100×200 300×600

它将允许一个单一单词(不需要一个字符坐在两个独特单词之间) 尽管如果距离超过一个单词,它会抛出一个错误,说单词不是足够 的区别类似可以在文本

的开始/结束/中间传递给不同的博客后发现,我发现类似的方法来使用本机PHP函数xdiff_string_diff我的关注,但问题是,我不能让代码有效。我得到错误说xdiff_string_diff是未定义的函数。 你们中的任何人都知道应该加载哪些扩展才能使这个功能可用? 或者如果你可以建议另一种方法,它将是伟大的,非常感谢。 :)

<?php 
$old_article = "grey tiles 100 X 200 kitchen flooring"; 
$new_article = "grey tiles 300 X 600 kitchen flooring" 

$diff = xdiff_string_diff($old_article, $new_article, 1); 
if (is_string($diff)) { 
    echo "Differences between two articles:\n"; 
    echo $diff; 
} 

?> 
+4

xdiff不是本地库。 – 2012-08-17 08:16:06

+3

为您考虑:100 x 200/300x 600不是差异。区别是100 x 2/300 x 6.两个蜇有... 00厨房...共同地! – 2012-08-17 08:29:36

回答

2

在每个功能(或库)的每一个手册页,如果是用PHP运默认或不和的PHP版本的他们开始它包装成释放它总是提到。

如果它不在发行版中,那么它会提及它所在的包(PECL或PEAR)。

Øits手册页它指出:

PECL xdiff >= 0.2.0 

如果你正在运行BSD/Solaris/Linux操作系统/ Mac的所有你所要做的就是打开一个控制台,输入:

pear install xdiff 
7

您将不得不安装xdiff

pecl install xdiff 

或者,您可以尝试使用array_diff来查找dif字符串之间的差异。爆炸他们在空间,然后和array_diff他们:

$a1 = explode(" " , 'grey tiles 100 X 200 kitchen flooring'); 
$a2 = explode(" ", 'grey tiles 300 X 600 kitchen flooring'); 

echo join(' ', array_diff($a1, $a2)); // 100 200 

这不会赶上X虽然,作为X将是在这方面的字符串的公共部分。

+0

nahh我失去了对xdiff的胃口。也许我们可以有另一种方法。 – lidongghon 2012-08-17 08:38:13

+0

尝试上面的方法 – 2012-08-17 08:47:24

+0

恩,事情是什么时候使用array_diff是比较词而不管它的位置。这对我来说是不相关的。也许它更好地循环原始语句数组中的每个索引 – lidongghon 2012-08-17 09:02:07

0

你可以逐一比较每个字符,每增加一个计数器就可以增加一个。但这个解决方案不会给你“300”,它会给你3.

+0

问题不是关于如何比较字符串,而是关于天气安装'xdiff'封装。 – 2012-08-17 08:21:02

+0

,但@ user1065261说:“如果你可以建议另一种方法,它将是伟大的,非常感激。” – PepeDeLew 2012-08-17 08:23:08

+0

任何建议,非常感谢。以及我可以分割每一个单词,并把一个索引给他们,我们可以有一个循环到每个索引和比较单词。在这个解决方案使用array_intersect和array_diff,但我不知道,对我来说我不满意这个解决方案。这只适用于几句话,如果我们有一个很长的句子。肯定会有很多索引在阵列中,这是非常浪费的内存 – lidongghon 2012-08-17 08:31:31