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<count($a)-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]) {
这将产生与上述相同的结果.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。