Вот небольшой пример того, что я пытаюсь создать.Вложенный цикл foreach в цикле While может привести к тому, что условие для цикла while продолжается?
Я создаю функцию под названием getNextBilling($dateStart,$dateCount = 20)
Вы даете ему длину периода, который дни вы хотите кого-то, чтобы быть выставлен счет
$test->period = '2,5,15';
он принимает начальную дату, которая я назначенную на тестовой странице
$test->getNextBilling('2015-06-12 00:00:00',2);
Что должна делать функция, убедитесь, что введенные даты меньше текущей даты, чтобы пропустить этот месячный биллинг, который отлично работает.
Что не работает, так это то, что у меня есть цикл внутри моего цикла while, чтобы увидеть все введенные дни, я не могу найти способ заставить код работать там, где он на самом деле просто показывает количество дней, которое вы хотеть.
выше пример, который показывает, что я хочу, чтобы отобразить дней выход является
Array
(
[1] => 2015-06-15
[2] => 2015-07-02
[3] => 2015-07-05
[4] => 2015-07-15
)
Вот код функции
// SET START DATE
$startDate = new DateTime($dateStart);
// LOOP
$i = 1;
while($i <= $dateCount){
// LOOP THROUGH INPUTED DAYS
foreach($days as $day){
// CLEAN DAY
$day = formatNumbersOnly($day);
// SET LAST DAY
$lastDay = new DateTime($startDate->format('Y-m-d'));
$lastDay->modify('last day of this month');
// CHECK FOR PASSED DAY
if($day > $startDate->format('j')){
// CHECK FOR 28-29-30-31
if($day > $lastDay->format('j')){
// SET NEW DATE
$startDate->setDate(
$startDate->format('Y'),
$startDate->format('m'),
$lastDay->format('j')
);
} else {
// SET NEW DATE
$startDate->setDate(
$startDate->format('Y'),
$startDate->format('m'),
$day
);
}
// SET ARRAY
$nextBilling[$i] = $startDate->format('Y-m-d');
} else {
// SKIP
$i--;
}
// INCREASE COUNT
$i++;
}
// NEXT MONTH
$startDate->modify('1 month');
$startDate->setDate($startDate->format('Y'),$startDate->format('m'),1);
}
Теперь я понимаю, где проблема, это из-за увеличение количества внутри цикла foreach
, однако, когда я вывожу его за пределы, он будет выводить только последний день в днях следующим образом:
Array ( [-1] => 2015-06-15 [0] => 2015-07-15 [1] => 2015-08-15 [2] => 2015-09-15 )
Если у кого есть какая-либо критика или советы, которые были бы весьма признательны. Я буду продолжать пытаться это исправить.
EDIT: Я добавил, если Постулаты в начале foreach
, чтобы проверить, если $i
больше $dateCount
будет вырваться из петли. Спасибо Твисты за ваше время и усилия, я ценю это.
Я не вижу, где ваш цикл foreach закрывается в вашем примере. – Twisty
foreach закрывается после '// INCREASE COUNT $ i ++;' – Derek
Где определяется '$ days'? – Twisty