月初から今日の二日前までの日付を配列で取得しようとしています。
PHP
1$config['now'] = new DateTimeImmutable; 2 3function get_day_list($config){ 4 $day_list = array(); 5 $ed_date = $config['now']->modify('-2 day')->format('Y-m-d');//2日前 6 $st_date = $config['now']->modify('first day of this month')->format('Y-m-d'); 7 $ed_ob = new DateTimeImmutable($ed_date); 8 $st_ob = new DateTime($st_date); 9 10 $stop = 0; 11 if($st_ob<$ed_ob): 12 while($stop<1): 13 $date = $st_ob->format('Y-m-d'); 14 $day_list[] = $date; 15 if($date==$ed_ob): 16 ++$stop; 17 else: 18 $st_ob = $st_ob->modify('+1 day'); 19 endif; 20 endwhile; 21 elseif($st_ob==$ed_ob): 22 $day_list[]=$st_date;//1日だけ 23 else://($st_ob>$ed_ob) 24 return;//何もせずに関数を終える。返り値なし。 25 endif; 26 27 return $day_list; 28}
起きている現象
やけに時間がかかり、
Fatal error: Allowed memory size of 1342177280 bytes exhausted (tried to allocate 4096 bytes) in* * * * * function.php on line 48
となる。
該当する箇所がwhileのところなので無限ループを疑い、$stop=0;の直前でこの二つのDateTimeオブジェクトをチェックしてみたが特に異常はない。
//$st_ob DateTime Object ( [date] => 2019-06-01 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Tokyo ) //$ed_ob DateTimeImmutable Object ( [date] => 2019-06-26 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Tokyo )
このエラーはどう回避すればよいのでしょうか・・・。
While分の中の変数を標準出力に出してみたらわかるのでは?
回答5件
あなたの回答
tips
プレビュー