首页 > 解决方案 > 向数组中添加一个值并扩展循环迭代

问题描述

我想将一个值推入一个循环,并在添加该值后将循环向前移动一步或多步。我的问题是该值正在替换当前数组值而不是向前扩展。到目前为止,这是我的代码:

<?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 向前移动之后的值,并且数组的循环可以正常重复。

标签: phparrays

解决方案


完成这项工作的最简单方法可能是记录跳过的天数并将其用于计算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上的完整代码和演示


推荐阅读