Muhammad Febrik
Muhammad Febrik

Reputation: 89

get array value from Loop statement in javascript

my php code is this

$newArr = array();

$newArr['Item1']=$array1;
$newArr['Item2']=$array2;
$newArr['Item3']=$array3;
$newArr['Item4']=$array4;
$newArr['Item5']=$array5;
$newArr['Item6']=$array6;
$newArr['Item8']=$array8;

echo json_encode($newArr);

i wanted to build a line chart with chartjs with those data. so the chart would looks like this....

enter image description here

here is my current code js......

$(document).ready(function(){
$.ajax({
    url : "http://localhost/clicklog/clicklog.php",
    type : "GET",
    success : function(newArr){
        //console.log(newArr.Item1);


        Clicks1 = [];
        Clicks2 = [];
        Clicks3 = [];
        Clicks4 = [];
        Clicks5 = [];
        Clicks6 = [];
        Clicks8 = [];

        for(var i in newArr){

            //console.log(newArr[i]);

            for(var x in newArr[i]){
                //console.log(newArr[i][x]);
                Clicks1.push(newArr[i][x]);

            }

        }

        console.log(Clicks1);

with this code, my variable "Clicks1" has this value

[18948, 13783, 9484, 5468, 46267, 33511, 22824, 13204, 5378, 3773, 2564, 1586, 18076, 13252, 8979, 5394, 10273, 7139, 4713, 2632, 8812, 6326, 4465, 2751, 18083, 12924, 8886, 5354]

which is comes from "newArray" without sorting.

i wanted to put value in the "var clicks1" only for those data that comes from "item 1"

here is the result of my php code..

{"Item1":{"2009-04-17":18948,"2009-04-18":13783,"2009-04-19":9484,"2009-04-20":5468},
"Item2":{"2009-04-17":46267,"2009-04-18":33511,"2009-04-19":22824,"2009-04-20":13204},
"Item3":{"2009-04-17":5378,"2009-04-18":3773,"2009-04-19":2564,"2009-04-20":1586},
"Item4":{"2009-04-17":18076,"2009-04-18":13252,"2009-04-19":8979,"2009-04-20":5394},
"Item5":{"2009-04-17":10273,"2009-04-18":7139,"2009-04-19":4713,"2009-04-20":2632},
"Item6":{"2009-04-17":8812,"2009-04-18":6326,"2009-04-19":4465,"2009-04-20":2751},
"Item8":{"2009-04-17":18083,"2009-04-18":12924,"2009-04-19":8886,"2009-04-20":5354}}

thank you for the help

Upvotes: 0

Views: 48

Answers (1)

T.J. Crowder
T.J. Crowder

Reputation: 1074276

i wanted to put value in the "var clicks1" only for those data that comes from "item 1"

Here's how you do that, but keep reading:

var newArr = {"Item1":{"2009-04-17":18948,"2009-04-18":13783,"2009-04-19":9484,"2009-04-20":5468},
"Item2":{"2009-04-17":46267,"2009-04-18":33511,"2009-04-19":22824,"2009-04-20":13204},
"Item3":{"2009-04-17":5378,"2009-04-18":3773,"2009-04-19":2564,"2009-04-20":1586},
"Item4":{"2009-04-17":18076,"2009-04-18":13252,"2009-04-19":8979,"2009-04-20":5394},
"Item5":{"2009-04-17":10273,"2009-04-18":7139,"2009-04-19":4713,"2009-04-20":2632},
"Item6":{"2009-04-17":8812,"2009-04-18":6326,"2009-04-19":4465,"2009-04-20":2751},
"Item8":{"2009-04-17":18083,"2009-04-18":12924,"2009-04-19":8886,"2009-04-20":5354}};

var Clicks1 = [];
var data1 = newArr.Item1;
for (x in data1) {
   Clicks1.push(data1[x]);
}
console.log(Clicks1);

...but then you'll have to keep doing that for Clicks2 through Clicks7. Whenever you find yourself, in any programming language, with variables like "var1, var2, var3, var4" and so on, it tells you you want to use an array instead.

Without more context one can't say specifically how to change it, because we don't know what you're going to do with Clicks1 through Clicks7, but you'll most likely want to change the PHP to be dealing with arrays (the non-associative kind), and then using the resulting arrays in your JavaScript code.

But for what it's worth, this gives you a single array with the data from each ItemX in your existing response, in order by ItemX label, in an array called allclicks:

var newArr = {"Item1":{"2009-04-17":18948,"2009-04-18":13783,"2009-04-19":9484,"2009-04-20":5468},
"Item2":{"2009-04-17":46267,"2009-04-18":33511,"2009-04-19":22824,"2009-04-20":13204},
"Item3":{"2009-04-17":5378,"2009-04-18":3773,"2009-04-19":2564,"2009-04-20":1586},
"Item4":{"2009-04-17":18076,"2009-04-18":13252,"2009-04-19":8979,"2009-04-20":5394},
"Item5":{"2009-04-17":10273,"2009-04-18":7139,"2009-04-19":4713,"2009-04-20":2632},
"Item6":{"2009-04-17":8812,"2009-04-18":6326,"2009-04-19":4465,"2009-04-20":2751},
"Item8":{"2009-04-17":18083,"2009-04-18":12924,"2009-04-19":8886,"2009-04-20":5354}};

// An array we'll put arrays inside
var allclicks = [];
// Loop through the items in alphabetical order
Object.keys(newArr).sort().forEach(function(itemKey) {
  // Get the item for this key
  var item = newArr[itemKey];
  
  // Add an array to allclicks for this item's clicks
  itemclicks = allclicks[allclicks.length] = [];
  
  // Loop through this items dates to get the clicks
  for (date in item) {
    itemclicks.push(item[date]);
  }
});
console.log(allclicks);

Then you use allclicks[0], allclicks[1], etc., rather than Clicks1, Clicks2, etc.

Upvotes: 1

Related Questions