PHP在数字数组范围内找到气泡

时间:2019-03-04 07:43:02

标签: php arrays

样本数组

$array = [

    61029,
    64698,
    67355,
    70000, // has bubble
    43651,
    48346,
    52029,  // has bubble 
    48029,
    48698,
    49355,
    50000,

    ];

如何识别数组是升序还是降序,并且也有气泡

2 个答案:

答案 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)

注意事项

这仅适用于关联的数组(具有顺序编号索引的数组)。这仅适用于一维数组。

DbFunctions.CreateDateTime

答案 1 :(得分:1)

您可以循环数组,查看该值是否小于先前的值。
如果是,则先前的值是气泡。

$prev = 0;
foreach($array as $a){
    if($a>$prev){
        $prev = $a;
    }else{
        $result[] = $prev;
        $prev = $a;
    }
}

var_dump($result);
//70000, 52029

https://3v4l.org/8qWMI