如何计算最大数量,这些数字在 PHP 中按日期连续增加
How can I count the max amount of numbers, which are increasing in a row by date in PHP
我的目标是计算最大数量的数字,这些数字在特定日期范围内连续增加。下面是一个数组。在 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 编码的初学者。你能帮帮我吗?
好吧,如果您已经有了 2 部分代码,则只需将它们组合在一起即可。我的建议是在检查 $row
数组元素是否在特定日期范围内时输入 $numbers
数组。
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
函数做了一点修改,它会 运行 更快更正确。
我的目标是计算最大数量的数字,这些数字在特定日期范围内连续增加。下面是一个数组。在 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 编码的初学者。你能帮帮我吗?
好吧,如果您已经有了 2 部分代码,则只需将它们组合在一起即可。我的建议是在检查 $row
数组元素是否在特定日期范围内时输入 $numbers
数组。
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
函数做了一点修改,它会 运行 更快更正确。