我有这个生效日期,阵列开始并每 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:oDate: 2019-01-07 Value: bDate:2019-01-25 Value:a但我得到:Date:2019-01-05 Value:oDate: 2019-01-07 Value: bDate:2019-01-25 Value:如何从生效日期开始每 12 个周期获取日期的第 n 个值?
2 回答

缥缈止盈
TA贡献2041条经验 获得超4个赞
你不需要一个循环。循环很慢。
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

慕婉清6462132
TA贡献1804条经验 获得超2个赞
您的问题是,一旦超过数组的长度,您就不会重置数组索引。您可以通过更改来解决此问题:
$i = $i+1;
到
$i = ($i+1) % 12;
请注意,如果您启用了 PHP 错误报告(请参阅此处),您将收到“未定义偏移”通知,这将帮助您找到此问题。
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报
0/150
提交
取消