2017-03-09 4 views
0

私は入力フォームがいくつかのセクションから存在するサイトを持っています。私はすべての入力を配列に保存し、それらの配列は再び配列にパックされるので、すべてのセクションは独自の配列を持ちます。アレイの配列

しかし、私はループスルーに問題があるようです。これらのセクション配列には、データベースに挿入する必要のある言語が含まれているため、セクション配列をループする必要があります。

どうすれば正しくループできますか?

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); 

結果は、その後AJAX POSTでsendedではれます。

// 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']; 

      } 

     } 

    } 

ajax.php

しかし、このループが機能していません。エラーIllegal String Offsetを返します。しかし、必要なセクション配列をループするかどうかはわかりません。それ以外の場合は、データベースに格納する場所がわかりません。

希望の結果を得るにはどうすればよいですか?

UPDATE 1:$オブジェクトは、私は第二JSON文字列を抽出するために、ループでは

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"}] 
     ) 

) 

要求でオブジェクト変数の印刷を

を印刷します。

UPDATE 2:変数$項目は、今、私が必要とする4つの配列で部分配列を返すん ので、変数の項目を返します。

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 
     ) 

) 

これらの4つの値が、私は、クエリのために必要な値です。そのクエリは私のエンドゴールです。この目標を達成するにはどうしたらいいですか?私はお互いの後にすべての値を更新したくありません。

+0

'ますprint_r($オブジェクト);' – AbraCadaver

+0

@AbraCadaverが質問 – Synthiatic

+0

このリーを交換してみてくださいを更新しましたne $ obj = json_decode($ objects [$ i] ['string']、true); $ obj = $ objects [$ i] ['string']とチェック – rahulsm

答えて

1

JSON文字列を含む配列の配列($object)があります。ループ、デコード、ループループ内でデコードされたJSON stringように構成されます。

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 
     ) 
) 

だからループいるとnamevalueにアクセス:

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

私は交互にあなたがループデコードJSONなどのようなアクセス可能性を推測:

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

私はforループ内の配列内の配列をデコードします。 forループをforeachに置き換える必要があるのですか? – Synthiatic

+0

はい、これは私がそれを行う方法です、もっときれいで簡単に従います。 – AbraCadaver

+0

ありがとうございます。これは確かに私に結果をもたらします。彼はあなたの例のようにすべての "サブアレイ"をループしますか?私はこれを印刷物で確認することはできません。 (なぜなら、すべての配列が印刷されるからです) – Synthiatic

関連する問題