2012-08-17 80 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