按日期透视数据库查询结果以创建按日期分组的二维数组

问题描述 投票:0回答:2

这是我的 php 代码。

$approveddata = "SELECT DATE AS DATE, company_id, count As Approved
                 FROM tbl_summary_order
                 WHERE DATE >= DATE( NOW( ) ) - INTERVAL 7 DAY
                     AND STATUS = 4
                 GROUP BY company_id, DATE( DATE ) 
                 ORDER BY DATE ASC "

while ($_row = $rsqueryapproveddata->read()) {
    $list1[$_row['DATE']][$_row['company_id']] = $_row['Approved'];
}

我得到的输出为

 "data": {
    "2018-01-30": { "1": "10", "2": "5" },
    "2018-01-31": { "1": "10" }
}

但我需要一种格式来在每一行中包含日期值。

类似于下面的格式

data: [{ date: '2018-01-30', 1: 10, 2: 5, }, { date: '2018-01-31', 1: 10 }
php arrays multidimensional-array pivot grouping
2个回答
1
投票

您可以使用包含当前日期值的关联数组来初始化

$list1
,然后当循环完成时使用 array_values 函数获取数字数组形式的结果:

while ($_row = $rsqueryapproveddata->read()) {

    if ( !isset( $list1[ $_row['DATE'] ] ) {
        $list1[ $_row['DATE'] ] = [ 'date' => $_row['DATE'] ]
    }

    $list1[ $_row['DATE'] ] [ $_row['company_id'] ] = $_row['Approved'];  

}

$result = array_values($list1);

0
投票

要按日期分组并不断扩展每组中的关联对,而不利用稍后要删除的一级键,您可以将引用变量推入结果数组中,然后仅根据需要修改引用。

代码:(演示

$result = [];
while ($_row = $rsqueryapproveddata->read()) {
    if (!isset($ref[$_row['DATE']])) {
        $ref[$_row['DATE']] = ['date' => $_row['DATE']];
        $result[] =& $ref[$_row['DATE']];
    }
    $ref[$_row['DATE']][$_row['company_id']] = $_row['Approved'];
}
var_export($result);

输出:

array (
  0 => 
  array (
    'date' => '2018-01-30',
    1 => '10',
    2 => '5',
  ),
  1 => 
  array (
    'date' => '2018-01-31',
    1 => '10',
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.