Как создать правильный размерный массив с помощью PHP JSON - PullRequest
0 голосов
/ 02 декабря 2018

у меня два стола, машина и продавец

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». Мне нужно предложение изменить мой код.спасибо

1 Ответ

0 голосов
/ 02 декабря 2018
$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);
...