现在是凌晨3点,我超级累,我不知道如何让这个东西工作。下面的数组是从数据库中返回的,包含了过去7天的页面浏览量、日期和消息等信息:
Array
(
[0] => Array
(
[vws] => 9
[mss] => 0
[dt] => 2016-06-27
)
[1] => Array
(
[vws] => 4
[mss] => 0
[dt] => 2016-06-26
)
[2] => Array
(
[vws] => 1
[mss] => 0
[dt] => 2016-06-24
)
[3] => Array
(
[vws] => 7
[mss] => 0
[dt] => 2016-06-23
)
)
这个数组应该包含数据,即使没有页面浏览量或消息,所以这就是我要找的:
Array
(
[0] => Array
(
[vws] => 0
[mss] => 0
[dt] => 2016-06-22
)
[1] => Array
(
[vws] => 13
[mss] => 1
[dt] => 2016-06-23
)
[2] => Array
(
[vws] => 7
[mss] => 3
[dt] => 2016-06-24
)
[3] => Array
(
[vws] => 45
[mss] => 10
[dt] => 2016-06-25
)
[4] => Array
(
[vws] => 0
[mss] => 0
[dt] => 2016-06-26
)
[5] => Array
(
[vws] => 0
[mss] => 0
[dt] => 2016-06-27
)
[6] => Array
(
[vws] => 5
[mss] => 1
[dt] => 2016-06-28
)
)
如果我没有说清楚,我很抱歉。如果你需要更多信息,我会更新我的问题。提前谢谢你
编辑似乎使用dt
值作为键是一个好主意,但我仍然认为通过使用in_array
检查dt
值可以更容易地实现相同的结果。
感谢@ArtisiticPhoenix,这段代码现在工作得很好:
$new = [];
foreach ($data as $k => $v) {
$new[$v['dt']] = $v;
}
$Date = new DateTime();
$days = [];
for ($i = 0; $i < 7; ++$i) {
$days[$Date->format('Y-m-d')] = [
'vws' => 0,
'mss' => 0,
'dt' => $Date->format('Y-m-d')
];
$Date->modify('-1 days');
}
$final = array_merge($days, $new);
首先用空值构建一个每天的数组
//current date
$Date = new DateTime();
$days = array();
//loop 7 times, seven days in the week ( forget if it should be <= ) 7s to high for me to count in my head right now. :)~
for($i = 0; $i<7; ++$i ){
$days[$Date->format('Y-m-d')] = array(
'vws' => 0,
'mss' => 0,
'dt' => $Date->format('Y-m-d')
);
//subtract 1 day from today's date.
$DateTime->modify('-1 days');
}
接下来,使用array_merge将其与数据库数据
合并。 $data = array_merge( $days, $dbDays );
注意准备好的数组中的键是日期。您还需要将其添加到db填充的数据中,这使得array_merge替换这些值,而不是附加条目(就像如果它们只是编号索引一样)。无论如何,它使关联数据变得容易得多
或者你可以在db的while循环中添加它们,像这样
while( false !== ( $row = $stmt->fetch() ) ){
$days[$row['dt']] = $row;
}
但我不确定数据来自何处(mysql_ mysqli_ PDO)