Массив для подсерий на старших графиках Drilldown - PullRequest
0 голосов
/ 04 сентября 2018

У меня возникли некоторые проблемы при создании графиков с разверткой в ​​Highcharts. Я использую Highcharts для рендеринга пирога с сериями детализации. Мне нужно преобразовать этот вывод JSON

Drilldownseries = [
    {
        "name": "LAZIO",
        "data": [["ROMA", 28]],
        "id": "LAZIO"
    },
    {
        "name": "LAZIO",
        "data": [["FROSINONE", 218]],
        "id": "LAZIO"
    },
    {
        "name": "LAZIO",
        "data": [["LATINA", 212]],
        "id": "LAZIO"
    },
    {
        "name": "TOSCANA",
        "data": [["FIRENZE", 2]],
        "id": "TOSCANA"
    },
    {
        "name": "TOSCANA",
        "data": [["LIVORNO", 5]],
        "id": "TOSCANA"
    },
    {
        "name": "TOSCANA",
        "data": [["PISA", 9]],
        "id": "TOSCANA"
    }
];

до

Drilldownseries = [
    {
        "name": "LAZIO",
        "data": [["ROMA", 28], ["FROSINONE", 218], ["LATINA", 212]],
        "id": "LAZIO"
    },
    {
        "name": "TOSCANA",
        "data": [["FIRENZE", 2], ["LIVORNO", 5], ["PISA", 9]],
        "id": "TOSCANA"
    }
];

Это часть запроса, которая заполняет массив:

...
if($res3)
{
    $i = 0;

    while ($row = mysqli_fetch_array($res3, MYSQLI_ASSOC))
    {
        $row3[$i]["name"] = $row["name"];
        $row3[$i]["data"] = [[$row["subname"],$row["data"]]];
        $row3[$i]["id"] = $row["id"];            
        $i++;
    };

    $row3 = json_encode($row3,JSON_NUMERIC_CHECK);    
};

Я бы предпочел извлечь массив с правильно сформированным php, но он должен быть таким же, как json.

PHP 7.2
Highcharts 6.1.1

1 Ответ

0 голосов
/ 06 сентября 2018

на пользу всем, это мое решение. Уточненный код следует ценить :) Первые снятые квадратные скобки в коде ниже

        $row3[$i]["data"] = [$row["subname"],$row["data"]];

затем создайте новый массив, чтобы

$repl = array();
$i = 0;
foreach ($row3 as $value) {
    if (!isset($repl[$i]['id'])) {      
        $repl[$i]['id'] = $value['id'];
        $repl[$i]['name'] = $value['name'];
        $repl[$i]['data'] = [$value['data']];
    } elseif (($repl[$i]['id']) <>$value['id']) {
            $i++;
            $repl[$i]['id'] = $value['id'];
            $repl[$i]['name'] = $value['name'];
            $repl[$i]['data'] = [$value['data']];
    } else {
            array_push($repl[$i]['data'], $value['data']);
    }
}
$resultx = json_encode($repl,JSON_NUMERIC_CHECK);  

спасибо

...