首页 > 解决方案 > 如何使用 php json 创建正确的维度数组

问题描述

我有两张桌子,汽车和供应商

table: Car
--------------------------- 
| carID | carBrand        |
---------------------------
| 1     | Volvo           |
---------------------------
| 2     | BMW             |
---------------------------
| 3     | Mercedes        |
---------------------------

table: Vendor
----------------------------------------------------
| vendorID | vendorName        | telephone | carID |
----------------------------------------------------
| 1        | Jusoh Trading     | 12345     | 1     |
----------------------------------------------------
| 2        | Ibrahim and Sons  | 34566     | 1     |
----------------------------------------------------
| 3        | GMC Auto          | 566444    | 2     |
----------------------------------------------------
| 4        | Perodua Services  | 456666    | 3     |
----------------------------------------------------
| 5        | AMG Specs         | 5666      | 3     |
----------------------------------------------------

我使用 sql 查询(codeigniter)使用 json 生成输出。通过使用输出,我将创建一个图表,这是我的插件所需的数组格式。我使用上面的 sql & json 编码的成功输出如下:

[
  {
    "carBrand": "Volvo",
    "carID": "1"
  },
  [
    {
      "vendorID": "1",
      "vendorName": "Jusoh Trading"
    },
    {
      "vendorID": "2",
      "vendorName": "Ibrahim and Sons"
    }
  ],
  {
    "carBrand": "BMW",
    "carID": "2"
  },
  [
    {
      "vendorID": "3",
      "vendorName": "GMC Auto"
    }
  ],
  {
    "carBrand": "Mercedes",
    "carID": "3"
  },
  [
    {
      "vendorID": "4",
      "vendorName": "Perodua Services"
    },
    {
      "vendorID": "5",
      "vendorName": "AMG Specs"
    }
  ]
]

我生成输出的代码:

$data = array();
$this->db->select("carBrand, carID");
$this->db->from('car');
$query = $this->db->get();

$result = $query->result();

foreach ($result as $row):
    $data[] = $row;

    $this->db->select("vendorID, vendorName");
    $this->db->from('vendor');
    $this->db->where('carID',$row->carID);
    $query = $this->db->get();
    $res = $query->result();

    $child = array();
        foreach ($res as $val):
            $child[] = $val;
        endforeach;

    array_push($data, $child);
endforeach;

echo json_encode($data);
exit;

但我的问题是,地图插件需要一些不同的格式。我需要稍微改变一下我的输出格式。我需要的确切格式如下:

[
  {
    "carBrand": "Volvo",
    "vendorlist": [
    {
        "vendorID": "1",
        "vendorName": "Jusoh Trading"
    },
    {
        "vendorID": "2",
        "vendorName": "Ibrahim and Sons"
    }
    ]
  },
  {
    "carBrand": "BMW",
    "vendorlist": [
    {
        "vendorID": "3",
        "vendorName": "GMC Auto"
    }
    ]
  }
  # .. other data .. #
];

我需要删除“carID”并添加“vendorlist”..我需要修改我的代码的建议。谢谢你

标签: phparraysjsoncodeignitermultidimensional-array

解决方案


$json = '[
  {
    "carBrand": "Volvo",
    "carID": "1"
  },
  [
    {
      "vendorID": "1",
      "vendorName": "Jusoh Trading"
    },
    {
      "vendorID": "2",
      "vendorName": "Ibrahim and Sons"
    }
  ],
  {
    "carBrand": "BMW",
    "carID": "2"
  },
  [
    {
      "vendorID": "3",
      "vendorName": "GMC Auto"
    }
  ],
  {
    "carBrand": "Mercedes",
    "carID": "3"
  },
  [
    {
      "vendorID": "4",
      "vendorName": "Perodua Services"
    },
    {
      "vendorID": "5",
      "vendorName": "AMG Specs"
    }
  ]
]';

$narr = [];
$arr = json_decode($json,true);

foreach($arr as $k => $v)
{

  if( $k%2 == 0)
  {
    $narr[] = ['carBrand' => $v['carBrand'] , 'vendorlist' =>  $arr[$k+1]];
  }
}

$new_json = json_encode($narr);

推荐阅读