3

I am trying to create an multiple array set for an highchart as you can see here HighChart Demo

PHP code to retrieve data from the database.

    $sql = <<< SQL
             SELECT TOP (
             [miles]
            ,[status]
            FROM [database].[dbo].[portal]
  SQL;

$result = $conn->prepare($sql);
$result->execute();
$rowCount = $result->fetchColumn();

$dataset = array('name' => 'Naam');

while($row = $result->fetch(PDO::FETCH_ASSOC)){

    $data[] = $row['automillage'];
}


array_push($dataset, $data);
echo json_encode($dataset,JSON_NUMERIC_CHECK);

The current output of my array is

       {
        0: [
            1000,
            2297,
            1500,
            3301,
           ],
        name: "Naam"
       }

But what i really want is starting with data instead of starting with 0:

           {
        Data: [
            1000,
            2297,
            1500,
            3301,
           ],
        name: "Naam"
       }

And I am wondering how i can get two data series in one array.

Tnx to @bassxzero i have now the right output.

But I want to achieve one more thing. Getting two data series in one array like in the Example:

    series: [{
    name: 'Tokyo',
    data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}, {
    name: 'London',
    data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}]

When I try to json_decode the two arrays, I get an error while compiling the code.

- The error code is: json_decode() expects parameter 1 to be string, array given

$dataset['Data'] = $data;
$dataset2['Data'] = $data2;
$join[] = json_decode($dataset, true);
$join[] = json_decode($dataset2, true);


echo json_encode($join,JSON_NUMERIC_CHECK);

And after that i want to update it with json. My code is like this:

            var chart = new Highcharts.chart('container', {
            chart: {
                type: 'line'
            },
            title: {
                text: 'Monthly Average Temperature'
            },
            subtitle: {
                text: 'Source: WorldClimate.com'
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                title: {
                    text: 'Temperature (°C)'
                }
            },
            plotOptions: {
                line: {
                    dataLabels: {
                        enabled: true
                    },
                    enableMouseTracking: false
                }
            },
            series: [{
                name: 'Tokyo',
                data: ''
            }, {
                name: 'London',
                data: ''
            }]
        });

        function chartUpdate() {
            $.getJSON("dbcon/connection - Copy.php", function (dataset) {
                chart.update({
                    series: [{
                        data: dataset
                    }]
                });
            });
        } //end chartUpdate 
2
  • 3
    change array_push($dataset, $data); to $dataset['Data']= $data; Commented Dec 18, 2017 at 14:10
  • Damn it :) Thank you very much for your answer. Do you also know how I can make this array repeat with other values so i can get the series name: 'name', data: [ data ], name: 'name 2', data: [ data2] with the array? see my updated question. Commented Dec 18, 2017 at 14:52

3 Answers 3

2

Note:- array_push() creating a numeric index,while you need an associative index.

So, Instead of:-

array_push($dataset, $data);

do:-

$dataset['Data'] = $data;

pass two arrays in one array output:

$dataset['data'] = $data;
$dataset2['data'] = $data2;
$join[] = json_decode(json_encode($dataset), true);
$join[] = json_decode(json_encode($dataset2), true);

echo json_encode($join,JSON_NUMERIC_CHECK);
Sign up to request clarification or add additional context in comments.

2 Comments

Sergio did you checked the answer?
Sorry I saw it too late. Already passed the answer in this post. Thank you for your time and support.
1

You should add the data with a key instead of just pushing it to the array.

$dataset['Data'] = $data

EDIT: @bassxzero beat me to it in his comment.

2 Comments

Thank you Jim for your answer. Do you know ho I can get the second series into the same array without making a new array? See my updated question. Thank you.
@Sergio check my answer for that
1

First of all thank you for the answers.

The answer for getting the array in the right output was thanx to bassxzero:

Change: array_push($dataset, $data); to $dataset['Data']= $data;

The answer to pass two arrays in one array output:

$dataset['data'] = $data;
$dataset2['data'] = $data2;
$join[] = json_decode(json_encode($dataset), true);
$join[] = json_decode(json_encode($dataset2), true);

echo json_encode($join,JSON_NUMERIC_CHECK);

1 Comment

I tried already, but if I don't use two variables I don't get the result I am looking for. I want to achieve this: ibb.co/bxuWN6 With two variables I am able to make it work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.