【问题标题】:Array to JSON using PHP in Codeigniter在 Codeigniter 中使用 PHP 将数组转换为 JSON
【发布时间】:2017-12-02 17:20:39
【问题描述】:

我有一个如下的数组:

 Array ( [0] => Array ( [SI] => 1 
                        [name] => Nick 
                        [location] => Russia
                        [year] => 2011 ) 
        [1] => Array ( [SI] => 8 
                       [name] => Mike 
                       [location] => Russia 
                       [year] => 2011 )
        [2] => Array ( [SI] => 2 
                       [name] => Tom 
                       [location] => Russia 
                       [year] => 2010 )
        [3] => Array ( [SI] => 6 
                       [name] => Duke 
                       [location] => Russia 
                       [year] => 2010 ) )     

当前 JSON 格式:

 {
"name": "Amalians",
"img": "https:\/\/dl.dropboxusercontent.com\/u\/19954023\/marvel_force_chart_img\/marvel.png",
"children": [
    {
        "name": "2011"
    },
    {
        "children": [
            {
                "SI": "1"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Nick"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2011"
    },
    {
        "children": [
            {
                "SI": "8"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Mike"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2010"
    },
    {
        "children": [
            {
                "SI": "2"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Tom"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2010"
    },
    {
        "children": [
            {
                "SI": "6"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Duke"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    }
  ]
}

所需的 JSON 格式:

 {
   "name": "marvel",
   "img": "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png",
   "children": [
    {
       "name": "2011",
       "children": [
        {
           "SI": "1",
           "name": "Nick", 
           "location": "Russia"
        },
        {
           "SI": "8",
           "name": "Mike", 
           "location": "Russia"
        }
       ]
     },
     {
       "name": "2010",
       "children": [
        {
           "SI": "2",
           "name": "Tom", 
           "location": "Russia"
        },
        {
           "SI": "6",
           "name": "Duke", 
           "location": "Russia"
        }
       ]
      }
    ]
 }    

代码:

    $data['name'] = "Amalians";
    $data['img'] = "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png";

    foreach($people as $row)
    {

            $data['children'][]['name'] = $row['year'];
            $data['children'][]['children'][]['SI'] = $row['SI'];
            $data['children'][]['children'][]['name'] = $row['name'];
            $data['children'][]['children'][]['location'] = $row['location'];
    }
    echo "<pre>";
    echo json_encode($data,JSON_PRETTY_PRINT);
    echo "</pre>"; exit();     

注意:$people 是上面定义的数组。
请帮助我做到这一点。过去两天我一直在研究这个问题,直到此刻我找不到任何解决方案。谢谢

【问题讨论】:

    标签: php arrays json codeigniter parsing


    【解决方案1】:

    你可以试试这个:

    这里需要按键year对数组进行分组。

    $array = array();
    foreach ($people as $val) {
        $array[$val['year']][] = $val;
    }
    
    $data['name'] = "Amalians";
    $data['img'] = "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png";
    
    $i = 0;
    foreach ($array as $key => $value) {
        foreach ($value as $key2 => $value2) {
            $data['children'][$i]['name'] = $value2['year'];
            $data['children'][$i]['children'][$key2]['SI'] = $value2['SI'];
            $data['children'][$i]['children'][$key2]['name'] = $value2['name'];
            $data['children'][$i]['children'][$key2]['location'] = $value2['location'];
        }
        $i++;
    }
    
    echo "<pre>";
    echo json_encode($data, JSON_PRETTY_PRINT);
    echo "</pre>";
    exit();
    

    【讨论】:

      【解决方案2】:

      我想最简单的方法是对数据进行分组

      $arrData = [
          [
              "SI" => 1,
              "name" => "Nick",
              "location" => "Russia",
              "year" => 2011
          ],
          [
              "SI" => 2,
              "name" => "Mike",
              "location" => "Russia",
              "year" => 2011
          ],
          [
              "SI" => 3,
              "name" => "Tom",
              "location" => "Russia",
              "year" => 2010
          ],
          [
              "SI" => 4,
              "name" => "Duke",
              "location" => "Russia",
              "year" => 2010
          ],
      ];
      
      $arrGroupedData = [];
      
      
      foreach($arrData AS $row)
      {
          $arrGroupedData[$row['year']][] = [ "SI" => $row['SI'],  "name" => $row['name'], "location" => $row['location']];
      
      }
      
      $arrGroupFormattedData = [];
      
      foreach($arrGroupedData AS $key => $arrGroup)
      {
          $arrGroupFormattedData[] = ["name" => $key, "children" => $arrGroup];
      }
      
      $data = [
          "name" => "Amalians",
          "img" => "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png",
          "children" => $arrGroupFormattedData
      ];
      
      echo json_encode($data,JSON_PRETTY_PRINT);
      

      【讨论】:

      • 哇...太完美了。你让我开心:) (Y)
      【解决方案3】:
          <?php
          $array =  Array(Array( "SI" => 1, 
                                  "name" => Nick, 
                                  "location" => Russia,
                                  "year" => 2011), 
                          Array ( "SI" => 8, 
                                 "name" => Mike ,
                                 "location" => Russia ,
                                 "year" => 2011),
                          Array ( "SI" => 2, 
                                 "name" => Tom, 
                                 "location" => Russia, 
                                 "year" => 2010 ),
                          Array ( "SI" => 6, 
                                 "name" => Duke, 
                                 "location" => Russia ,
                                 "year" => 2010 ) );
          $json_final['child'] = array();
          $temp = array();
          foreach($array as $arr)
          {
              $flag=0;
              if(!empty($json_final['child']))
              {
                  foreach($json_final['child'] as $name_data)
                  {
                      if($name_data['name'] == $arr['year'])
                      {
                          $flag=1;
      
      array_push($name_data['child_sub'],array("SI"=>$arr['SI'],"name"=>$arr['name'],"location"=>$arr['location']));
                          array_push($temp, $name_data);
                      }
                  }
              }
              if($flag == 0)
              {
                  array_push($json_final['child'],array("name"=>$arr['year'],"child_sub"=>array(array("SI"=>$arr['SI'],"name"=>$arr['name'],"location"=>$arr['location']))));
              }   
          }
          $json_final['child'] = $temp;
          //print_r($json_final);
          echo json_encode($json_final,true)
      
          ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 2016-07-07
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多