为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
白衣非少年 2022-01-24 13:04:36
我有这个生效日期,阵列开始并每 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


查看完整回答
反对 回复 2022-01-24
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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

$i = $i+1;

$i = ($i+1) % 12;

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


查看完整回答
反对 回复 2022-01-24
  • 2 回答
  • 0 关注
  • 238 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号