Php 从生效日期开始,检查每个日期的第n项

Php 从生效日期开始,检查每个日期的第n项,php,Php,我有这个生效日期,数组每12个周期开始并重复一次。那么如何检查特定日期的项目值 我尝试从生效日期开始获取特定日期的项目值,但它不返回任何值 <?php $start_date = '2019-01-01'; $end_date = '2019-01-30'; $item = array('a','a','a','a','o','o','b','b','b','b','o','o'); $i = 0; while (strtotime($start_date) <= strtoti

我有这个生效日期,数组每12个周期开始并重复一次。那么如何检查特定日期的项目值

我尝试从生效日期开始获取特定日期的项目值,但它不返回任何值

<?php
$start_date = '2019-01-01';
$end_date = '2019-01-30';

$item = array('a','a','a','a','o','o','b','b','b','b','o','o');
$i = 0;

while (strtotime($start_date) <= strtotime($end_date)) {
    $i = $i+1;
    $value = $item[$i];

    if($start_date == '2019-01-05') {
    echo "Date:".$start_date." Value:".$value;
    echo "</br>";
    }
    if($start_date == '2019-01-07') {
    echo "Date: ".$start_date." Value: ".$value;
    echo "</br>";
    }
    if($start_date == '2019-01-25') {
    echo "Date: ".$start_date." Value: ".$value;
    echo "</br>";
    }

    $start_date = date ("Y-m-d", strtotime("+1 day", strtotime($start_date)));
    }

?>
但我得到:

Date:2019-01-05 Value:o
Date: 2019-01-07 Value: b
Date:2019-01-25 Value:

如何从生效日期开始每隔12个周期获取日期的第n个值?

您的问题是,一旦数组索引超过数组长度,就不会重置数组索引。您可以通过更改以下内容来解决此问题:

$i = $i+1;


请注意,如果启用了PHP错误报告(请参阅),您将收到一条“未定义偏移量”通知,这将有助于您发现此问题。

您的问题是,一旦数组索引超过数组长度,您就没有重置数组索引。您可以通过更改以下内容来解决此问题:

$i = $i+1;


请注意,如果启用了PHP错误报告(请参阅),您将收到一个“未定义的偏移量”通知,它将帮助您找到此问题。

您不需要循环。循环很慢

function getItem($date, $startDate){
  $item = array('a','a','a','a','o','o','b','b','b','b','o','o');
  $diff = date_create($startDate)->diff(date_create($date));
  if($diff->invert) return false; //error $date < $startDate
  return $item[$diff->days%12];
}

//example for use
$date = "2019-01-25";
$startDate = '2019-01-01';

echo getItem($date, $startDate);  //a
函数getItem($date,$startDate){ $item=array('a','a','a','o','o','b','b','b','b','o','o'); $diff=date\u create($startDate)->diff(date\u create($date)); if($diff->invert)返回false;//错误$date<$startDate 返回$item[$diff->days%12]; } //使用示例 $date=“2019-01-25”; $startDate='2019-01-01'; echo getItem($date,$startDate)//A.
您不需要循环。循环很慢

function getItem($date, $startDate){
  $item = array('a','a','a','a','o','o','b','b','b','b','o','o');
  $diff = date_create($startDate)->diff(date_create($date));
  if($diff->invert) return false; //error $date < $startDate
  return $item[$diff->days%12];
}

//example for use
$date = "2019-01-25";
$startDate = '2019-01-01';

echo getItem($date, $startDate);  //a
函数getItem($date,$startDate){ $item=array('a','a','a','o','o','b','b','b','b','o','o'); $diff=date\u create($startDate)->diff(date\u create($date)); if($diff->invert)返回false;//错误$date<$startDate 返回$item[$diff->days%12]; } //使用示例 $date=“2019-01-25”; $startDate='2019-01-01'; echo getItem($date,$startDate)//A.
谢谢!我从来没有想过使用modolus运算符。它起作用了。对于您的替代解决方案,除了数组中的日期之外,我如何选择另一个日期?假设为“2019-03-01”,考虑到12个周期的生效日期,如何获得该日期的值值值从“2019-01-01”开始计算?天数的计算采用/(24*60*60);这是不对的。不是每天都有24小时(夏季/冬季时间变化的日子)。@jspit不敢相信我忘记了这一点。@jspit我认为这没关系,因为全国大部分地区每天都有24小时。@jspit是正确的,如果你有夏令时,此代码将不起作用。谢谢!我从来没有想过使用modolus运算符。它起作用了。对于您的替代解决方案,除了数组中的日期之外,我如何选择另一个日期?假设为“2019-03-01”,考虑到12个周期的生效日期,如何获得该日期的值值值从“2019-01-01”开始计算?天数的计算采用/(24*60*60);这是不对的。不是每天都有24小时(夏季/冬季时间变化的日子)。@jspit不敢相信我忘记了这一点。@jspit我认为这没关系,因为全国大部分地区每天都有24小时。@jspit是正确的,如果你有夏令时,这段代码将不起作用。很好。我在想不使用循环的问题是什么。好的。我在想,不使用循环的问题是什么。