php Кумулятивно добавлять числа из массива к дате - PullRequest
0 голосов
/ 25 октября 2019

у меня есть массив с номерами, с не сериализованными ключами. и назначить свиданиеКак я могу добавить даты с накопительными значениями массива?

я использовал функцию с foreach {} и добавить дни к дате следующим образом:

$nextDate[] = date("Y-m-d", strtotime('+'.$g.' day', strtotime($aDate)));

данные:

$date='2019-01-01 00:00:00';
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

я хочу выйти, но вот так, я хочу, чтобы массив стал первым id = дата + текущие дни, затем следующий стал id = prevdate + текущие дни

вот так



$result=[
    //'4'=>'1',
    '4'=>'2019-01-02',// $date+1
    //'6'=>'2',
    '6'=>'2019-01-04',//previous result + 2
    //'8'=>'5',
    '8'=>'2019-01-09',//previous result + 5
    //'20'=>'2',
    '20'=>'2019-01-11',//previous result + 2
    //'54'=>'6',
    '54'=>'2019-01-17',//previous result + 2
    //'62'=>'4',
    '62'=>'2019-01-21',//previous result + 4
    //'64'=>'1',
    '64'=>'2019-01-22',//previous result + 1
    //'65'=>'1',
    '65'=>'2019-01-23',//previous result + 1
    //'68'=>'1',
    '68'=>'2019-01-24',//previous result + 1
    //'70'=>'1',
    '70'=>'2019-01-25',//previous result + 1
    //'78'=>'20'
    '78'=>'2019-02-14',//previous result + 20
];

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вот, пожалуйста. Я передаю объект даты, который является ссылкой, поэтому он изменяет объект по мере его добавления.

$date = new DateTime('2019-01-01 00:00:00');
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

$result = array_map(function($days) use ($date) {
  $date->add(new DateInterval('P' . $days . 'D'));
  return  $date->format('Y-m-d');
}, $days);

print_r($result);
0 голосов
/ 25 октября 2019

Это делает и простой foreach.

Объект DateTime $ dateTime изменяется методом изменения в каждом цикле. Следующий метод форматирования не меняет этого и возвращает только желаемую строку даты для нового значения массива.

<code>//given
$date='2019-01-01 00:00:00';
$days=[
    //id=>days
    '4'=>'1',
    '6'=>'2',
    '8'=>'5',
    '20'=>'2',
    '54'=>'6',
    '62'=>'4',
    '64'=>'1',
    '65'=>'1',
    '68'=>'1',
    '70'=>'1',
    '78'=>'20'
];

//calculation
$dateTime = new DateTime($date);
foreach($days as $key => $day){
  $days[$key] = $dateTime->modify($day." Days")->format('Y-m-d');
}

//Test output
echo "<pre>".var_export($days,true)."
";

Вывод

array (
  4 => '2019-01-02',
  6 => '2019-01-04',
  8 => '2019-01-09',
  20 => '2019-01-11',
  54 => '2019-01-17',
  62 => '2019-01-21',
  64 => '2019-01-22',
  65 => '2019-01-23',
  68 => '2019-01-24',
  70 => '2019-01-25',
  78 => '2019-02-14',
)

Примечание:Выходы через var_export можно скопировать и просто использовать в качестве исходного кода php для дальнейшего тестирования.

...