2016-11-10 3 views
-1

Ich versuche, eine Liste von Jahr und Monat von PHP zu meiner Website-Seite zu bekommen. Die Website arbeitet mit JavaScript, also brauche ich diese Daten als JSON.PHP-Kodierung verschachtelten Array als Objekt

Es gibt kein Problem, um die Informationen zu generieren, die ich brauche, aber ich verwende json_encode auf der PHP, alle geschachtelten Arrays werden in Objekt und aus diesem Grund kann ich nicht das richtige Verhalten auf dem JavaScript haben.

Das ist, was ich tue das Array auf der PHP zu generieren:

Array (
    [0] => Array (
     [year] => 2016 
     [month] => Array (
      [1] => stdClass Object (
       [Month] => Jan 
      ) 
      [2] => stdClass Object (
       [Month] => Feb 
      ) 
      //Etc... 

Aber wenn ich benutze:

$list = sql("SELECT DISTINCT YEAR(created) AS year FROM order"); 

foreach ($list as &$row) { 
    $row['month'] = array(); 

    for ($i=1; $i<=12; $i++) { 
     $row['month'][$i] = new stdClass(); 
     $row['month'][$i]->Month = date("M", strtotime(date("Y")."-".$i."-01")); 

     //more information goes here... 
    } 
} 

Wenn ich das Ergebnis mit return print_r($list); dieses ist $list bedrucken Alle

return print_r(json_encode($list)); 
//or 
return print_r(json_encode($list, true)); 

die verschachtelte Array in Objekt drehen. Zum Beispiel, das Monat Array in ein Objekt drehen, das ist ein Druckbild der console.log des Ergebnisses:

enter image description here

Gibt es eine Möglichkeit, dies zu beheben? Oder mache ich falsch?

+3

Nun, Sie können nicht Arrays ab Index 1 haben. Wenn Sie ein Array wollen, müssen Ihre Indizes 0 - 11 sein. – deceze

+0

@deceze einfach so! War so auf den anderen Teil konzentriert, vergaß dieses Detail .. Danke. Wenn Sie es in eine Antwort verwandeln können, kann ich akzeptieren. Vielen Dank! – celsomtrindade

+0

Ich würde lieber zuerst das month-Objekt erstellen und es dann dem Array hinzufügen: '$ row ['month'] [] = $ monthObj;' – Jeff

Antwort

0

Wenn Sie nur Monatsnamen benötigen, dann ersetzen diese Zeilen:

$row['month'][$i] = new stdClass(); 
$row['month'][$i]->Month = date("M", strtotime(date("Y")."-".$i."-01")); 

mit diesem:

$row['month'][$i] = date("M", strtotime(date("Y")."-".$i."-01")); 

Sie brauchen keine STD-Objekt für das, was Sie zu erreichen Tring.

+0

Ich brauche mehr Informationen, aber da es für die Frage nicht relevant ist, habe ich den Code weggelassen. – celsomtrindade

+0

@CelsomTrindade Fragen Sie hier, oder senden Sie Ihre Frage um. Was ist das, was du nicht verstehst? – besciualex

+0

Blick auf Dezeze Kommentar, er beantwortete die Frage. – celsomtrindade

Verwandte Themen