2012-02-15 157 views
1

我需要兩個數組並獲得百分比的相似度。即:獲得兩個數組在php中的相似度百分比

array(0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>1)) 

VERS

array(0=>'1' , 1=>'45' , 2=>'6' , 3=>array(0=>1)) 

在那裏我會覺得%的75

array(0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>'1')) 

VERS

array(0=>'1' , 1=>'2' , 2=>'6' , 3=>array(0=>'55')) 

不知道如何處理這個..只需要結束一個可行的浮動百分比。謝謝 。

回答

0

假設兩個數組的長度相同,您可以遍歷,看哪個值的鍵相同,例如:

<?php 
$a = array(1,2,3,4); 
$b = array(1,2,4,4); 
$c = 0; 
foreach ($a as $k=>$v) { 
    if ($v == $b[$k]) $c++; 
} 
echo ($c/count($a))*100; 
// outputs 75 
?> 

或者只是檢查是否含有使用in_array類似的項目。

<?php 
$a = array(1,2,3); 
$b = array(1,2,4); 
$c = 0; 
foreach ($a as $i) { 
    if (in_array($i,$b)) $c++; 
} 
echo ($c/count($a))*100; 
// outputs 66.66... 
?> 
+0

我更喜歡這個,因爲它是最短的。謝謝..我堅持瞭如何處理嵌套數組。 – 2012-02-15 18:11:40

1

將計數設置爲零。

遍歷數組,檢查每對元素是否相等。如果是,請增加計數。

最後,相似度是計數除以數組中元素的總數。

這假定數組長度相同並且具有相同的鍵 - 否則定義「相似性」是困難的。

+0

對於數組具有不同長度,如何計算它們%? 必須有某種方式。 – Faizan 2013-01-02 17:24:05

0

您可以首先計算總項目的數量。然後你需要一個函數來告訴你一個子項是否相同(bool)。

然後你一次通過兩個數組並計數相同的匹配。要獲得百分比,請將總數除以前數,並將結果乘以100.

您需要決定如何處理只存在於其中但不存在於其中的元素陣列。此外,如果您想要進入元素(如果這些元素也是數組),則可以使is_same($a, $b)函數遞歸併返回浮點值(0-1,而不是0-100)並計算該分數而不是0 FALSE或1 TRUE。

0

count($array)會給你數組中的元素總數。然後,您可以比較數組中的數字,併爲所有相同的數字計數,並執行[total number of same number/the count($array)] *100。這應該給百分比

0

這是一個算法。

int count = 0; 
for(int i = 0; i < arraySize; i++) 
{ 
    if(array1[i] == array2[i]) 
    { 
    count++; 
    } 

} 

float percent = ((count/arraySize)*100); 
5

以下是我最近解決了這個問題:

$array1 = array('item1','item2','item3','item4','item5'); 
$array2 = array('item1','item4','item6','item7','item8','item9','item10'); 

// returns array containing only items that appear in both arrays 
$matches = array_intersect($array1,$array2); 

// calculate 'similarity' of array 2 to array 1 
// if you want to calculate the inverse, the 'similarity' of array 1 
// to array 2, replace $array1 with $array2 below 
$similarity = round(count($matches)/(count($array1)*100); 

echo 'SIMILARITY: ' . $similarity . '%'; 

// i.e., SIMILARITY: 40% 
// (2 of 5 items in array1 have matches in array2 = 40%) 
+0

ha你的個人資料圖片看起來像一個地方,我喜歡吃在希洛,嗨..反正..你遲了yeps我猜這將工作以及.. – 2012-08-03 19:48:20

+0

哥斯達黎加,其實:) – 2012-08-03 20:35:34

+0

如果數組是不同的長度?然後我們如何計算兩個數組的百分比相似度(以單個%數量計算)。例如,UserA與UserB有75%的相似度,UserC與用戶D有10%的相似度。 – Faizan 2013-01-02 17:23:08