5

in my controller i have an array which i have populated from my database and stored which looks like this and is called dataset2

    array(2) {
      ["April"]=> int(92)
      ["May"]=>  int(86)
    }

In my view i can dd{{}} on the array and see this is the structure.

Now I want to convert it into a javascript array so i can use flot to make it into a graph.

my Javascript within my view looks like this

 <script language="javascript" type="text/javascript">
    $(function () {

        var data1 = [
            ["April", 13],
            ["May", 20],
         ];

   var data2 = [<?php echo json_encode($dataset2 );?>];

   $.plot("#placeholder", [{
       data: data1,
       label: "NewBeach"
   }, {
       data: data2,
       label: "Sandhills"
   }], {
       series: {
           lines: { show: true },
           points: {
              show: true,
              barWidth: 0.1,
              align: "center"
           }
       },
       xaxis: {
           mode: "categories"
       },
        yaxis: {
       },
       grid: { 
           hoverable: true, 
           clickable: true 
       }
   });
});
</script>

Am i missing something when converting it?, as it doesnt draw anything with the JSON_encode array but does with the hard coded one. From what i have read it seems as though thats all i need. Is it because of the values within my array?

Kind regards Mike

1
  • you have already done it: var data2 = <?php echo json_encode($dataset2 );?>; just remove[] Commented May 14, 2014 at 13:42

3 Answers 3

7

you have already done it: var data2 = ; just remove the brackets [ ]

also assign key to your array e.g. array('key'=>'value')

$array = array(label=>value, name=>value);

var data2 = <?php echo json_encode($dataset2 );?>;
Sign up to request clarification or add additional context in comments.

2 Comments

This is correct, $arr = array('name'=>'bart', 'friend'=>'milhouse'); print json_encode($arr); returns {"name":"bart","friend":"mil house"}
Thanks for your help took me a couple of mins to get my head round it now but its clear now, thanks for your time.
5

As an alternative to the other answers - you could consider using a package for this. Jeffrey Way from Laracasts made this package laracasts/PHP-Vars-To-Js-Transformer

JavaScript::put('data2', $dataset2);

1 Comment

Thanks for your answer i will have to use this later on for sure. Im probably not using laravel to its full potential.
2

Your php array is an associative array, and that will be converted into a javascript object:

array(2) {
  ["April"]=> int(92)
  ["May"]=>  int(86)
}
// Will be:
{
  "April": 92,
  "May": 86
}
// When you `json_encode` it.  

If you wish it to look like your data1 javascript array, it will have to look something like this in php:

$array = Array(
  Array("April", 92),
  Array("May", 86)
);

In the above array, you put the objects in as arrays instead, which will produce an array with arrays (multi dimensional array) for javascript after json_encode.

Comments

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.