php - 向数组中添加一个值并扩展循环迭代
问题描述
我想将一个值推入一个循环,并在添加该值后将循环向前移动一步或多步。我的问题是该值正在替换当前数组值而不是向前扩展。到目前为止,这是我的代码:
<?php
function getItem($date, $startDate){
$item = array('a','b','c','b','c');
$diff = date_create($startDate)->diff(date_create($date));
if($diff->invert) return false; //error $date < $startDate
return $item[$diff->days%5];
}
//example for use
$startDate = '2019-10-01';
$skipday = '2019-10-07';
$selected_start_date = '2019-10-01';
$selected_end_date = '2019-10-10';
$dates_array = array();
$current_date = strtotime($selected_start_date);
$last_date = strtotime($selected_end_date);
while( $current_date <= $last_date ) {
$dates_array[] = date('Y-m-d', $current_date);
$current_date = strtotime('+1 day', $current_date);
}
for($i=0; $i<count($dates_array); $i++) {
$today = $dates_array[$i];
$code = getItem($today, $startDate);
if($dates_array[$i] == $skipday) {
$code = "SKIP";
}
echo $today." ".$code."</br>";
}
?>
This is my current Output :
2019-10-01 a
2019-10-02 b
2019-10-03 c
2019-10-04 b
2019-10-05 c
2019-10-06 a
2019-10-07 SKIP
2019-10-08 c
2019-10-09 b
2019-10-10 c
This is my Expected Output :
2019-10-01 a
2019-10-02 b
2019-10-03 c
2019-10-04 b
2019-10-05 c
2019-10-06 a
2019-10-07 SKIP
2019-10-08 b
2019-10-09 c
2019-10-10 b
我想要实现的是 2019-10-07 向前移动之后的值,并且数组的循环可以正常重复。
解决方案
完成这项工作的最简单方法可能是记录跳过的天数并将其用于计算getItem
. 因此,更改getItem
为$skipped_days
输入:
function getItem($date, $startDate, $skipped_days){
$item = array('a','b','c','b','c');
$diff = date_create($startDate)->diff(date_create($date));
if($diff->invert) return false; //error $date < $startDate
return $item[($diff->days - $skipped_days) % 5];
}
计算代码中跳过的天数:
if($dates_array[$i] == $skipday) {
$code = "SKIP";
$skipped_days++;
}
并在调用中使用它getItem
:
$code = getItem($today, $startDate, $skipped_days);
请注意,您需要初始化$skipped_days
为 0,这可以在您设置时完成$skipDay
:
$skipday = '2019-10-07';
$skipped_days = 0;
输出:
2019-10-01 a</br>
2019-10-02 b</br>
2019-10-03 c</br>
2019-10-04 b</br>
2019-10-05 c</br>
2019-10-06 a</br>
2019-10-07 SKIP</br>
2019-10-08 b</br>
2019-10-09 c</br>
2019-10-10 b</br>
3v4l.org上的完整代码和演示
推荐阅读
- ios - iOS iCloud 文档:我可以防止文档被清除吗?
- asp.net - 此 MongoDB 部署不支持 ASP.net 核心上的可重试写入异常
- vue.js - Vue.js 在执行另一个函数之前等待 axios 响应
- python - 如何在 Python3 中将 `2020-04-06T09:04:52.610+02:00` 转换为 `datetime.datetime`?
- python - 嵌入的 pdf 文件未在 Django 中显示
- java - 使用 Jenkins 运行多模块 SpringBoot 微服务应用程序
- spring-boot - 可加性中的 Logback Spring 块日志级别
- javascript - 未捕获的 TypeError:AWS.TranscribeService 不是构造函数
- org-mode - 如何使用 org-roam-find-file 正确创建新文件?
- symfony - Clera Redis 缓存池:如何更改命名空间