如果我有一个像这样的数字列表:
10,9,8,8,9,7,6,5,4,6,7,8,11,10,12,14,16,20,30,29,28,29,27,25,20,18,15,10,8,5,4,1
Run Code Online (Sandbox Code Playgroud)
我想获得以下数字(符合此示例): 10,4,30,1
是否有可能编写一个能够获得这些极端的函数?
这些数字是图表的值,我想得到图表的高峰.
我没有测试过这么多,并且它不适用于少于3点的任何东西,但这应该给你一个很好的起点.
<?php
$array = array(10,9,8,8,9,7,6,5,4,6,7,8,11,10,12,14,16,20,30,29,28,29,27,25,20,18,15,10,8,5,4,1);
$extremes = array();
$last = null;
$num = count($array);
for($i=0;$i<$num - 1;$i++) {
$curr = $array[$i];
if($last === null) {
$extremes[] = $curr;
$last = $curr;
continue;
}
//min
if($last > $curr && $curr < $array[$i + 1]) {
$extremes[] = $curr;
}
//maxes
else if ($last < $curr && $curr > $array[$i + 1]) {
$extremes[] = $curr;
}
if($last != $curr && $curr != $array[$i + 1]) {
$last = $curr;
}
}
//add last point
$extremes[] = $array[$num - 1];
print_r($extremes);
Run Code Online (Sandbox Code Playgroud)
给你结果(你错过了列表中的一对):
Array
(
[0] => 10
[1] => 8
[2] => 9
[3] => 4
[4] => 11
[5] => 10
[6] => 30
[7] => 28
[8] => 29
[9] => 1
)
Run Code Online (Sandbox Code Playgroud)
如果你想让它完全像你的列表,你将不得不对数据应用一些平滑,或者对检测有一些容差.
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |