2017-03-09 42 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。

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

      } 

     } 

    } 

然而,這種循環是行不通的。它返回錯誤Illegal String Offset。但我不確定是否循環遍歷所需的節數組,否則我不知道將數據放入數據庫的位置。

我該如何得到想要的結果?

UPDATE 1:$對象打印

在請求的對象的可變打印

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

) 

在for循環我提取第二JSON字符串。

更新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); with $ 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

I在for循環中解碼數組中的數組。你的意思是我應該用foreach替換我的for循環嗎? – Synthiatic

+0

是的,這就是我要做的事情,更清潔,更容易遵循。 – AbraCadaver

+0

謝謝。這確實給了我一個結果。他是否像你的例子一樣循環每個「子陣列」?我無法通過打印檢查此問題。 (因爲這將打印每個陣列) – Synthiatic