La forma más sólida de hacerlo es usar DateTime
en lugar de 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
Ahora, puede formar su matriz de fechas así:
$sale_data = array();
foreach( $period as $day) {
$key = $day->format( 'M d');
$sale_data[ $key ] = 0;
}
Este inicializa tu matriz a algo como:
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)
}
Ahora tiene una matriz con todas las fechas posibles en los últimos 7 días y puede hacer esto en su ciclo:
$display_date = date('M d', $sale['created']);
$sale_data[$display_date] += $sale['amt'];
No necesita comprobar si existe la clave de matriz, ya que se garantiza que existe.
Finalmente, recomendaría buscar en el DATETIME
u otros tipos de columnas de fecha/hora asociadas, ya que serían más útiles aquí que almacenar las marcas de tiempo de UNIX. Podría estar utilizando las funciones de fecha/hora de MySQL para seleccionar correctamente las filas que está buscando en lugar de tener que crear una marca de tiempo UNIX cada vez que desee consultar datos basados en el tiempo.