2017-03-09 41 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