Как сгруппировать результаты mysqli_fetch_array по соответствующим датам?

Я пытаюсь построить граф в morrisjs с помощью php / mysql и мне нужно вывести объект в следующем формате. Он должен сгруппировать даты периода и затем перечислить имена, следующие за ним для соответствия результатов:

{period: "2019-02-06 12:00:00", shelly: 2147483647, debra: 1240996571, sally: 2147483647, bill: 2147483647, bob: 619685085, jim: 126614618},
{period: "2019-02-06 12:30:00", shelly: 2147483647, debra: 1240996571, sally: 2147483647, bill: 2147483647, bob: 619685085, jim: 126614618},
{period: "2019-02-06 13:00:00", shelly: 2147483647, debra: 1240996571, sally: 2147483647, bill: 2147483647, bob: 619685085, jim: 126614618}

PHP:

    while ($row = mysqli_fetch_array($poolChart)) {
$chart_data .= "{ \"period\": \"".$row["StatsHistoryTime"]."\", \"name\": \"".$row["name"]."\", \"hashrate\":".$row["hashrate"]."}, ";

}
$chart_data = substr($chart_data, 0, -2);

В настоящее время мой вывод выглядит так

[
{
"period": "2019-02-06 12:00:00",
"name": "shelly",
"hashrate": 2147483647
},
{
"period": "2019-02-06 12:00:00",
"name": "debra",
"hashrate": 1240996571
},
{
"period": "2019-02-06 12:00:00",
"name": "sally",
"hashrate": 2147483647
},
{
"period": "2019-02-06 12:00:00",
"name": "bill",
"hashrate": 2147483647
}
{
"period": "2019-02-06 12:30:00",
"name": "shelly",
"hashrate": 2147483647
},
{
"period": "2019-02-06 12:30:00",
"name": "debra",
"hashrate": 1460613388
},
{
"period": "2019-02-06 12:30:00",
"name": "sally",
"hashrate": 2147483647
},
{
"period": "2019-02-06 12:30:00",
"name": "bill",
"hashrate": 2147483647
}
]

0

Решение

Способ решения вашей проблемы состоит в том, чтобы перевести ваши данные в соответствующий формат (массив для каждого значения периода, причем другие значения в массиве являются комбинацией каждого name а также hashrate), а затем вы можете использовать json_encode чтобы преобразовать это в требуемый формат:

$chartdata = array();
while ($row = mysqli_fetch_array($poolChart)) {
$period = $row['StatsHistoryTime'];
// have we already got data for this period?
if (($k = array_search($period, array_column($chartdata, 'period'))) !== false) {
// yes, update data for this period
$chartdata[$k][$row['name']] = $row['hashrate'];
}
else {
// no, create a new array
$chartdata[] = array('period' => $period, $row['name'] => $row['hashrate']);
}
}
echo json_encode($chartdata);

Вывод (для ваших образцов данных)

[
{
"period":"2019-02-06 12:00:00",
"shelly":2147483647,
"debra":1240996571,
"sally":2147483647,
"bill":2147483647
},
{
"period":"2019-02-06 12:30:00",
"shelly":2147483647,
"debra":1460613388,
"sally":2147483647,
"bill":2147483647
}
]

Демо на 3v4l.org

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]