我需要找到最小的图形。
代码:
$mindots = array();
for ($i = 0; $i<=sizeof($chart); $i++ ) {
if ( $chart[$i] >=0 ) {
$mindots[1] = $i;
if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i] ) {
break;
}
}
}
for ($i = $mindots[1]+2; $i<=sizeof($chart); $i++ ) {
if ( $chart[$i] >=0 ) {
$mindots[2] = $i;
if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i]) {
break;
}
}
}
for ($i = $mindots[2]+2; $i<=sizeof($chart); $i++ ) {
if ( $chart[$i] >=0 ) {
$mindots[3] = $i;
if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i] ) {
break;
}
}
}
在这里你可以看到图形:
结果我有:
array(3) { [1]=> int(0) [2]=> int(6) [3]=> int(8) }
但我需要像~6 22 36这样的数字。
我的图表大小(x coord max)在35-45麻木范围内。
我的价值观:
0.0;2.0
1.0;4.0
2.0;16.0
3.0;18.0
4.0;7.0
5.0;4.0
6.0;2.0
7.0;2.0
8.0;5.0
9.0;7.0
10.0;10.0
11.0;10.0
12.0;12.0
13.0;7.0
14.0;5.0
15.0;9.0
16.0;10.0
17.0;11.0
18.0;12.0
19.0;6.0
20.0;2.0
21.0;0.0
22.0;2.0
23.0;6.0
24.0;11.0
25.0;11.0
26.0;12.0
27.0;11.0
28.0;6.0
29.0;7.0
30.0;11.0
31.0;10.0
32.0;11.0
33.0;10.0
34.0;2.0
35.0;0.0
36.0;0.0
37.0;2.0
38.0;4.0
39.0;14.0
40.0;15.0
41.0;7.0
42.0;4.0
或以数组形式(打印)
Array ( [0] => 2 [1] => 4 [2] => 16 [3] => 18 [4] => 7 [5] => 4 [6] => 2 [7] => 2 [8] => 5 [9] => 7 [10] => 10 [11] => 10 [12] => 12 [13] => 7 [14] => 5 [15] => 9 [16] => 10 [17] => 11 [18] => 12 [19] => 6 [20] => 2 [21] => 0 [22] => 2 [23] => 6 [24] => 11 [25] => 11 [26] => 12 [27] => 11 [28] => 6 [29] => 7 [30] => 11 [31] => 10 [32] => 11 [33] => 10 [34] => 2 [35] => 0 [36] => 0 [37] => 2 [38] => 4 [39] => 14 [40] => 15 [41] => 7 [42] => 4 )
如果有人不理解图表,我又做了另一个(带有其他值)
我该怎么做?
答案 0 :(得分:2)
如果我理解你的问题,那么下一段代码可能会对你有所帮助:
$localMinimums = array ();
for ($i = 1; $i<count($chart)-1; $i++) {
if ($chart[$i-1] > $chart[$i] && $chart[$i+1] >= $chart[$i]) {
$localMinimums[$i] = $chart[$i];
}
}
asort($localMinimums);
$result = array_slice($localMinimums, 0, 3); //I think that you need only 3 minimum elements
或者你可能需要通过thresold切片?
答案 1 :(得分:0)
对数组进行排序:
// Sorts by value..
asort($chart);
然后得到min:
// Smallest
$smallest = $chart[0];