标签:php
我有一个这样的系列:
14,13,12,14,15,18,20,17,15,19,22,24,22,18,15,14,17 ……
如果我使用这些值作为Y坐标在X-Y轴上的图表上绘制这些点,那么您将看到在20和20处存在峰值. 24.
我想在系列中找到所有这些峰值
我试过了:
$a=array(14, 13, 12, 14, 15, 18, 20, 17, 15, 19, 22, 24, 22, 18, 15, 14, 17 );
rsort($a);
echo $a[0];
echo $a[1];
但这并没有给出我在图表上看到的两个峰值.上面代码的结果是24和22.但是图表上的峰值是20和24 …
有没有办法检测阵列以确定整个系列中的峰值?
我不需要工作代码.只是我可以处理的一些想法.
解决方法:
正如Mark Baker建议的那样,您需要检查数组中的每个值是否大于上一个值和下一个值.这就是定义峰值的原因.
只需确保从第二个索引开始并在第n-1项上完成,否则你将得到一个未定义的偏移错误.
$a = array(14, 13, 12, 14, 15, 18, 20, 17, 15, 19, 22, 24, 22, 18, 15, 14, 17);
$arr = [];
for($i=1; $i
if($a[$i] > $a[$i+1] && $a[$i] > $a[$i-1]) {
array_push($arr, $a[$i]);
}
}
var_dump($arr); //returns: array(2) { [0]=> int(20) [1]=> int(24) }
根据您的应用程序,您可能希望添加一些逻辑,以防两个或更多项“一起”为峰值.例如,22,24,24,22,18.如果这是您想要的,只需更改逻辑以在下一项上检查> =:
if($a[$i] > $a[$i+1] && $a[$i] >= $a[$i-1]) {
这将产生与上述相同的结果.
标签:php
来源: https://codeday.me/bug/20190727/1552110.html