2010-06-22 112 views
0

對於下面的數組,這是~20,但如何以編程方式獲得它?如何獲得PHP中數組值之間的平均距離?

array(12) { 
    [0]=> 
    int(29) 
    [1]=> 
    int(50) 
    [2]=> 
    int(72) 
    [3]=> 
    int(93) 
    [4]=> 
    int(114) 
    [5]=> 
    int(136) 
    [6]=> 
    int(157) 
    [7]=> 
    int(178) 
    [8]=> 
    int(199) 
    [9]=> 
    int(221) 
    [10]=> 
    int(242) 
    [11]=> 
    int(263) 
} 
+0

你計算*所有*值之間的距離還是隻是連續的? – 2010-06-22 08:49:03

+0

@菲利克斯,只是連續的。 – wamp 2010-06-22 08:51:41

+2

您的項目是否總是按升序排序? – 2010-06-22 09:00:41

回答

1

什麼是從(僞代碼)阻止你:

diff = 0 
for i from 0 to (array length)-2     # this should be run (array length)-1 times total 
    diff += Math.abs(array[i]-array[i+1]) 
end          
return diff/(array length-1)   

如果PHP爲枚舉類型注入(或減少)或映射(或數組散步)方法,這將更加簡潔。

note我只提供這個僞代碼作爲將被用來解決這個問題的不言自明的算法。我承認我不是PHP的主人(相反,我從算法的角度來看待這個問題);我只是想知道爲什麼這個簡單的解決方案不被提問者採用。如果有一個答案可以做到這一點,本質上,並在適當的PHP中,請選擇它在我的上面。

+2

循環需要從0迭代到*數組長度* - 2. – Gumbo 2010-06-22 08:54:37

+0

http://www.php.net/manual/en/function.array-walk.php - 在數組的每個元素上運行用戶函數。 – Kazar 2010-06-22 08:55:03

+0

@Gumbo - 我的歉意;我正在使用排除了最終值的範圍。 – 2010-06-22 08:58:26

0
$difference = 0; 

$length = count($array); 

for ($i=1; $i < $length; $i++) 
    $difference += abs($array[$i] - $array[$i-1]); 
if ($length !== 0) 
    $result = $difference/$length; 
else 
    $result = 0; 
+0

格式化您的代碼並修復它。希望你不介意。 :) – 2010-06-22 08:57:52

+0

沒問題 - thx – Thariama 2010-06-22 09:03:31

+0

不知道添加'abs'的註釋去了哪裏,但也補充說。雖然Justin L.是對的 - 如果值按升序排序,則不需要。 – 2010-06-22 09:03:43

相關問題