2010-06-22 72 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

相关问题