这是我的 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 }
您可以使用包含当前日期值的关联数组来初始化
$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);
要按日期分组并不断扩展每组中的关联对,而不利用稍后要删除的一级键,您可以将引用变量推入结果数组中,然后仅根据需要修改引用。
代码:(演示)
$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',
),
)