2012-11-04 29 views
4

幫助,請比較兩個字符串,並採取以百分比它們之間的區別比較兩個字符串,並採取以百分比它們之間的區別(PHP)

我有兩個字符串,如:

first string: 
253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,247.0.0.24,197.0.0.35,189.0.0.98.... 
second string: 
255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127.... 

$first_array = explode(",", $out_string); 
$second_array = explode(",", $out_string_1); 
$result_array = array_merge(array_diff($first_array, $second_array), array_diff($second_array, $first_array)); 

$result = implode(",",$result_array); 
echo $result; 

回答

5

有用於此目的的兩個有趣的本地函數,similar_text()和similar_text的()levenshtein()

實施例:()的Levenshtein的

$string1 = 'AAAb'; 
$string2 = 'aaab'; 

similar_text ($string1, $string2, $percentege); 

echo $percentege . '%'; // Output: 25% 

實施例:

levenshtein($string1, $string2, 1, 1000, 1000000); 

EDIT 1

Considerin g第一個字符串總是與第二個字符串具有相同數量的條目,您可以嘗試下面的代碼。我已經創建兩個字符串爲測試目的,第二串具有在總共9

$first_string = '253.0.0.1,253.0.0.2,253.0.0.3,253.0.0.4,253.0.0.5,253.0.0.6,253.0.0.7,253.0.0.8,253.0.0.9'; 

$second_string = '253.0.0.1,253.0.0.2,255.255.255.127,255.255.255.128,255.255.255.129,255.255.255.130,255.255.255.131,255.255.255.132,255.255.255.133'; 

$first_array = explode(',', $first_string); 

$second_array = explode(',', $second_string); 

$total_entries = count($first_array); 

$array_differences = array_diff($first_array, $second_array); 

$different_entries = count($array_differences); 

$percentage = ($different_entries/$total_entries) * 100 ; 

echo 'Difference: ' . round($percentage, 2) . '%'; 
+0

我承認我也考慮過他們。 )但是認爲它們與這個特定的任務無關,因爲它基本上是比較數組(顯然是IP地址),而不是純字符串。 – raina77ow

+0

@ raina77ow,字符串是否有相同數量的IP地址? –

+0

它不是IP地址這是一個RGBA的代碼,他們有相同的數量 –

1

如何大約就這麼簡單......

$difference = count($result_array)/count($first_array) * 100; 

例如:

$arr1 = array(1, 2, 3, 4); 
$arr2 = array(5, 2, 4, 8); 
$res = array_diff($arr1, $arr2); 
printf("%.02f%%", count($res)/count($arr1) * 100); # 50.00% 
+0

您也可以將「差異」解釋爲「百分比變化」,在這種情況下,分子項可以是count($ first_array) - count($ result_array)'。 – Gian

+0

當然,我認爲這是關於份額。 – raina77ow

+0

你的代碼結果是100%...但是兩個數組不一樣 –

1

的相似度函數強烈地依賴於在其中將實施的上下文中兩個相等的條目和7名不同的條目。如果沒有對比較結果(即上下文)的解釋,幾乎不可能爲您提供開箱即用的相似性功能。儘管我能想到的所有相似性函數都是有效的,但它們都不適合您的問題。

相關問題