2017-03-09 7 views
0

Ich habe eine Website mit einem Eingabeformular bestehend aus ein paar Abschnitte. Ich speichere jede Eingabe in einem Array, und diese Arrays werden wieder in ein Array gepackt, so dass jeder Abschnitt sein eigenes Array hat.Array in Array lesen

Allerdings scheint ich Probleme mit dem Durchschleifen zu haben. Es muss die Abschnittsarrays durchlaufen, da diese "Abschnitts" -Arrays die Sprache enthalten, in der es in der Datenbank eingefügt werden soll.

Wie kann ich es richtig loopen?

Javascript

 // Start Array to store each arrays 
    var preresult = []; 

    $(".accordeon-body").each(function() { 

     // DATA: Language Short 
     var language_short = $(this).data("id"); 

     // Create Array from inputs, add language key 
     var array = $(this).find("textarea").serializeArray(); 
     array.push({name: 'language', value: language_short}); 

     // Create a JSON string from it 
     var string = JSON.stringify(array); 

     var object = {string}; 
     preresult.push(object); 

     event.preventDefault(); 
    }); 

    var result = JSON.stringify(preresult); 

Ergebnis wird dann mit einem AJAX POST gesendet.

ajax.php

// Get all POST Values 
    $string = $_POST['items']; 

    // Decode the Main JSON String 
    $objects = json_decode($string, true); 

    // For Loop the Objects String 
    for($i = 0; $i < count($objects); $i++){ 
     $obj = json_decode($objects[$i]['string'], true); 

     // Foreach for every array 
     foreach($obj as $arr => $accord) { 

      // Foreach to get array Values 
      foreach($accord as $data) { 

       echo $data['agg_e_txt']; 

      } 

     } 

    } 

diese Looping funktioniert jedoch nicht. Es gibt den Fehler Illegal String Offset zurück. Aber ich bin mir nicht sicher, ob ich die Abschnittsarrays, die ich brauche, durchschlinge, sonst weiß ich nicht, wo ich sie in die Datenbank schreiben soll.

Wie bekomme ich das gewünschte Ergebnis?

UPDATE 1: Objekte $ drucken

die Objekte variablen Druck

Array 
(
    [0] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":"Gutentag. Dies ist ein test!"},{"name":"agg_e_rec","value":"Keine"},{"name":"agg_e_spec","value":"Keine"},{"name":"language","value":"de"}] 
     ) 

    [1] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":"Hello there! How are U?"},{"name":"agg_e_rec","value":"None"},{"name":"agg_e_spec","value":"None"},{"name":"language","value":"en"}] 
     ) 

    [2] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"fr"}] 
     ) 

    [3] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"es"}] 
     ) 

    [4] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"pt-br"}] 
     ) 

    [5] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"ch"}] 
     ) 

    [6] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"ko"}] 
     ) 

    [7] => Array 
     (
      [string] => [{"name":"agg_e_txt","value":""},{"name":"agg_e_rec","value":""},{"name":"agg_e_spec","value":""},{"name":"language","value":"ru"}] 
     ) 

) 

In der for-Schleife extrahieren ich den zweiten JSON String Auf Anfrage.

UPDATE 2: var $ Artikel zurückgeben So sind die variablen Elemente zurückgibt nun die Sub-Array mit den 4-Arrays ich brauche:

Array 
(
    [0] => Array 
     (
      [name] => agg_e_txt 
      [value] => 
     ) 

    [1] => Array 
     (
      [name] => agg_e_rec 
      [value] => 
     ) 

    [2] => Array 
     (
      [name] => agg_e_spec 
      [value] => 
     ) 

    [3] => Array 
     (
      [name] => language 
      [value] => ru 
     ) 

) 

Diese vier Werte sind die Werte ich für eine Abfrage benötigen. Diese Frage ist mein Endziel. Wie kann ich dieses Ziel erreichen? Ich möchte nicht jeden Wert nacheinander aktualisieren. (Es muss eine einzige Abfrage sein)

+0

'print_r ($ object);' – AbraCadaver

+0

@AbraCadaver die Frage – Synthiatic

+0

aktualisiert versuchen, diese li zu ersetzen ne $ obj = json_decode ($ objekte [$ i] ['string'], true); mit $ obj = $ objects [$ i] ['string'] und überprüfen – rahulsm

Antwort

1

Sie haben ein Array (genannt $object) von Arrays, die eine JSON-Zeichenfolge enthalten. Loop, Decodierung und Loop.

dass
Array 
(
    [0] => Array 
     (
      [name] => agg_e_txt 
      [value] => Gutentag. Dies ist ein test! 
     ) 

    [1] => Array 
     (
      [name] => agg_e_rec 
      [value] => Keine 
     ) 

    [2] => Array 
     (
      [name] => agg_e_spec 
      [value] => Keine 
     ) 

    [3] => Array 
     (
      [name] => language 
      [value] => de 
     ) 
) 

So Sie Schleife und Zugriff auf die name und value: Die entschlüsselten JSON string in der Schleife wie strukturiert sein

foreach($object as $json) { 
    $rows = json_decode($json['string'], true); 
    foreach($rows as $row) { 
     echo $row['name'] . "=" . $row['value'] . "<br>\n"; 
    } 
} 

Ich denke, abwechselnd könnten Sie Schleife die decodierte JSON und Zugriff wie so :

foreach($object as $json) { 
    $rows = json_decode($json['string'], true); 
    foreach($rows as $row) { 
     foreach($row as $key => $val) { 
      echo $key . "=" . $val . "<br>\n"; 
     } 
    } 
} 
+0

Ich decode das Array innerhalb des Arrays in der for-Schleife. Meinst du, ich sollte meine for-Schleife durch eine foreach ersetzen? – Synthiatic

+0

Ja, so würde ich es machen, viel sauberer und leichter zu folgen. – AbraCadaver

+0

Danke.Das gibt mir tatsächlich ein Ergebnis. Schleifen Sie jedes "Subarray" wie Ihr Beispiel? Ich kann das nicht mit einem Ausdruck überprüfen. (Da wird natürlich jedes Array gedruckt) – Synthiatic