Я пытаюсь построить граф в 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
}
]
Способ решения вашей проблемы состоит в том, чтобы перевести ваши данные в соответствующий формат (массив для каждого значения периода, причем другие значения в массиве являются комбинацией каждого 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
}
]
Других решений пока нет …