如何计算 PHP 中按日期连续增加的最大数量

时间:2021-02-17 13:35:00

标签: php arrays counter

我的目标是获取在特定日期范围内连续增加的最大数量的计数。下面是一个数组。 2021 年 1 月 13 日和 2021 年 2 月 17 日之间的最大数量增长数字的正确答案是 5,因为数字 3、8、10、13、15 在该日期范围内正在增长。

我设法在一段时间内搜索...

$row = array(
  array('01/02/2021', 1),
  array('01/13/2021', 4),
  array('01/15/2021', 6),
  array('01/19/2021', 9),
  array('01/30/2021', 5),
  array('02/03/2021', 4),
  array('02/11/2021', 3),
  array('02/12/2021', 8),
  array('02/15/2021', 10),
  array('02/16/2021', 13),
  array('02/17/2021', 15),
  array('02/18/2021', 16)
);

$startDateNew = date('m/d/Y', strtotime("2021-01-13"));
$endDateNew = date('m/d/Y', strtotime("2021-02-17"));
foreach($row as $x) {
  if(($x[0]>=$startDateNew)&&($x[0]<=$endDateNew) ){
    echo 'Found ';
    print_r($x);
  }
}

我还设法在一维数组中搜索第一个递增的数字序列,因为下面代码的答案是 4。但是我没有成功在 if 语句之后继续这个搜索到下一个递增序列(和下一个和下一个),所以在这种情况下正确答案是 5。

除此之外,这两个搜索应该以某种方式结合在一起。

$numbers = array(1,4,6,9,5,4,3,8,10,13,15);

function LCIS($numbers) {
  $counter = 1; 
  $answer = 1; 
  for($i = 0; $i < count($numbers) -1; $i++) { //
    if ($numbers[$i] < $numbers[$i+1]) { //comparing array indexes together
      $counter++; //
      $answer = max($answer, $counter); //this doesn't do anything spectacular right now...
      continue; 
    }else {
      $counter == 1; 
    }
    return $answer;
  }
}

echo LCIS($numbers);

我是 php 编码的初学者。请帮帮我好吗?

1 个答案:

答案 0 :(得分:1)

好吧,如果您已经有两部分代码,您只需要将它们组合在一起。我的建议是在检查 $numbers 数组元素是否在特定日期范围内时输入 $row 数组。

function LCIS($numbers)
{
    $counter = 1;
    $answer = 1;
    for ($i = 0; $i < count($numbers) - 1; $i++) { //
        if ($numbers[$i] < $numbers[$i + 1]) { //comparing array indexes together
            $counter++; //
            $answer = max($answer, $counter); //this doesn't do anything spectacular right now...
        } else {
            $counter = 1;
        }

    }
    return $answer;
}

$row = array(
    array('01/02/2021', 1),
    array('01/13/2021', 4),
    array('01/15/2021', 6),
    array('01/19/2021', 9),
    array('01/30/2021', 5),
    array('02/03/2021', 4),
    array('02/11/2021', 3),
    array('02/12/2021', 8),
    array('02/15/2021', 10),
    array('02/16/2021', 13),
    array('02/17/2021', 15),
    array('02/18/2021', 16)
);

$numbers = array();
$startDateNew = date('m/d/Y', strtotime("2021-01-13"));
$endDateNew = date('m/d/Y', strtotime("2021-02-17"));
foreach($row as $x) {
    if(($x[0]>=$startDateNew)&&($x[0]<=$endDateNew) ){
        $numbers[] = $x[1];
    }
}

echo LCIS($numbers);

顺便说一句:我对您的 LCIS 函数做了一些修改,它会运行得更快更正确。

相关问题