样本数组
$array = [
61029,
64698,
67355,
70000, // has bubble
43651,
48346,
52029, // has bubble
48029,
48698,
49355,
50000,
];
如何识别数组是升序还是降序,并且也有气泡
答案 0 :(得分:2)
(以下是我的假设,如果我是对/错,请告诉我。)
泡沫环境:放贷人借贷。放款人偿还贷款。中途还清,又拿了一笔贷款。
气泡技术:数组包含降序排列的余额。如果该值增加(与上一个相比),则认为是泡沫。
这是在数组中识别气泡的方法:
<?php
/**
* An array in DESCENDING order (OP)
*/
$array = [
61029,
64698,
67355,
70000, // has bubble
43651,
48346,
52029, // has bubble
48029,
48698,
49355,
50000,
];
/**
* An array in ASCENDING order
*/
$asc_array = [
10,
20,
30,
40,
50,
45, //Has bubble
55
];
/**
* Given an array, identify a "bubble",
* aka. an increasing value in an otherwise decreasing value array.
* Returns the $key where the bubble resides.
*/
function identifyBubble($array){
foreach($array as $id => $item){
if(!$id){
continue;
}
if(!$array[$id+1]){
continue;
}
if(($array[$id-1] < $array[$id]) && ($array[$id] > $array[$id+1])){
return $id;
}
}
return false;
}
/**
* If an array is in ASCENDING order, switch it around,
* otherwise return the array as is.
*/
function makeArrayDescending($array){
if(reset($array) < end($array)){
return array_values(array_reverse($array));
}
return $array;
}
var_dump(identifyBubble($array));
var_dump(makeArrayDescending($asc_array));
var_dump(identifyBubble(makeArrayDescending($asc_array)));
输出
int(3)
array(7) {
[0]=>
int(55)
[1]=>
int(45)
[2]=>
int(50)
[3]=>
int(40)
[4]=>
int(30)
[5]=>
int(20)
[6]=>
int(10)
}
int(2)
注意事项
这仅适用于关联的数组(具有顺序编号索引的数组)。这仅适用于一维数组。
答案 1 :(得分:1)
您可以循环数组,查看该值是否小于先前的值。
如果是,则先前的值是气泡。
$prev = 0;
foreach($array as $a){
if($a>$prev){
$prev = $a;
}else{
$result[] = $prev;
$prev = $a;
}
}
var_dump($result);
//70000, 52029