0

I am trying to pass code from my PHP backend to the google-chart JavaScript API. I have had success using PHP’s json_encode(), for passing arrays of numbers and strings. For simple data arrays json_encode() works just fine:

<?php $data = [['Series1', 'Series2'], [0, 1], [2, 3], [3, 4]]; />
<script>
var data = <?php echo(json_encode($data));?>;
</script>

But, the Google Charts API requires that row-parameters be passed as objects in {curly braces}.

Here is the JavaScript array I am trying to produce:

var data = [
    ['Genre', 'Fantasy & Sci Fi', 'Romance', 'Mystery/Crime', 'General',
     'Western', 'Literature', { role: 'annotation' } ],
    ['2010', 10, 24, 20, 32, 18, 5, ''],
    ['2020', 16, 22, 23, 30, 16, 9, ''],
    ['2030', 28, 19, 29, 30, 12, 13, '']
];

The trouble is producing the {role: 'annotation'} bit in PHP. Any suggestions?

Rory O'Kane
  • 29,210
  • 11
  • 96
  • 131
  • You do not `JSON.parse()` JSON text when it is outputted directly in ` – Patrick Evans May 23 '16 at 22:01
  • Oh, you're right. I don't have that in there. I was going from memory and forgot that I didn't need that bit. I edited the question. – Christopher Culbreath May 23 '16 at 22:02
  • Possible duplicate of [PHP : Create array for JSON](http://stackoverflow.com/questions/6739871/php-create-array-for-json) – miken32 May 23 '16 at 23:36

2 Answers2

4

This should do the trick:

$data = [['Series1', 'Series2', ['role'=>'annotation']], [0, 1], [2, 3], [3, 4]]; 

You can create objects in php by creating a new stdClass, but an dictionary (key => value array) is converted to JSON the same way (with curly brackets). This would work as well:

$object = new stdClass();
$object->role = 'annotation';

$data = [['Series1', 'Series2', $object], [0, 1], [2, 3], [3, 4]];
Erik Terwan
  • 2,710
  • 19
  • 28
0

You can create an object in PHP and json_encode will create an object from that:

$myObj = new stdClass;
$myObj->role = "annotation";

Then 'json_encode($myObj);' will return the JSON object you want.

swatkins
  • 13,530
  • 4
  • 46
  • 78