数组格式和排序


Array format and sort

现在是凌晨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)