Det mest robusta sättet att göra detta på är att använda DateTime
istället för strtotime
:
$now = new DateTime( "7 days ago", new DateTimeZone('America/New_York'));
$interval = new DateInterval( 'P1D'); // 1 Day interval
$period = new DatePeriod( $now, $interval, 7); // 7 Days
Nu kan du skapa din samling av datum så här:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
Denna initierar din array till något som:
array(8) {
["Jun 18"]=> int(0)
["Jun 19"]=> int(0)
["Jun 20"]=> int(0)
["Jun 21"]=> int(0)
["Jun 22"]=> int(0)
["Jun 23"]=> int(0)
["Jun 24"]=> int(0)
["Jun 25"]=> int(0)
}
Nu har du en array med alla möjliga datum under de senaste 7 dagarna, och du kan göra detta i din loop:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
Du behöver inte kontrollera om arraynyckeln finns, eftersom den garanterat finns.
Slutligen skulle jag rekommendera att titta på DATETIME
eller andra associerade datum/tid kolumntyper, eftersom de skulle vara mer användbara här än att lagra UNIX-tidsstämplar. Du kan använda MySQL datum/tid-funktioner för att korrekt välja raderna du letar efter istället för att behöva skapa en UNIX-tidsstämpel varje gång du vill fråga efter data baserat på tid.