Php 如何找到数组的最小值(局部最小值图形)

Php 如何找到数组的最小值(局部最小值图形),php,math,graphics,Php,Math,Graphics,我需要找到图形的最小值 代码: $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;

我需要找到图形的最小值

代码:

$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;
        }
    }   
}
但我需要像6 22 36这样的数字

我的图表大小(x坐标最大值)在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
或以数组形式(打印)

如果有人不懂这个图,我就做另一个(用另一个值)

如何进行排序?

对阵列进行排序:

// Sorts by value.. 
asort($chart);
那就让min:

// Smallest
$smallest = $chart[0];

如果我正确理解您的问题,那么下一个代码可能会帮助您:

$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 
$localMinimums=array();
对于($i=1;$i$chart[$i]&&$chart[$i+1]>=$chart[$i]){
$localMinimums[$i]=$chart[$i];
}   
}
asort(当地最低限额);
$result=array\u slice($localminimum,0,3)//我认为您只需要3个最小元素

或者您可能需要通过thresold进行切片?

如果存在具有相同值的倍数,该怎么办?您可以看到,35和36中的值相同,但我只需要在该区域中找到一个1值(最小值)。然后您可以使用array_unique删除多个值哈代40秒前没有,因为我可以在x:30和x:45分别得到0和0。我不能忽视伊托克,再也不理解这一点了。。我回答的问题是“如何找到数组的最小值…”。。就是这样,主要是OP的错。但是你看,文本中有一些符号,它是复数形式,结果包含几个数字……你能显示
print\r($minidots)的输出吗许多问题。你有一个混乱的代码,大量的重复,因为每个最小值都有一个单独的循环。但你怎么能事先知道有多少最低限度呢?还有其他问题,比如如何知道索引+1和+2的存在?如果您正在检查最后一个元素呢?还有,我不明白你为什么在+2检查<代码>$iyes,已添加。我的图形大小(max x)在35-45之间,我不太懂PHP,只懂delphi。这样做对我来说比较容易。但是,我发现了大于0的点和图中增加的点。你可以看到值…好的,首先,用任务的正确描述更新问题。你已经把一位回答者弄糊涂了。对不起,尺码。。我的计划失败了。
// Smallest
$smallest = $chart[0];
$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