我无法找到问题的好标题。我正在做一个Restful API / JSON
我的问题是:
我有两张桌子:
Product: id, name
Prices: id_product, price
Product 1--* Prices (One product have got multiples prices)
所以,如果我想导出JSON中的下一个信息
products: [
{
id:1
name: chair
prices: [3.3,5.0,6.0]
}
, {
id:2
name: apple
prices: [2.0,5.0]
} ,..
]
我做下一个查询:
SELECT product.id, product.name, prices.price FROM procut LEFT JOIN prices ON product.id = prices.id_product
我得到了下一个结果:
id , name , prices
----------------------
1 chair 3.3
1 chair 5.0
1 chair 6.0
2 apple ...
...
我使用PHP,codeigniter。有没有办法在井形式JSON中进行转换?因为我必须重建结果,所以:
$resultArray = $query->result_array(); //CodeIgniter
foreach($resultArray as $row)
{
if(!isset($resultData[$row['id']]))
{
$resultData[$row['id']] = $row;
unset($resultData[$row['id']]['price']);
$resultData[$row['id']]['prices'] = array();
}
$resultData[$row['id']]['prices'][] = $row['price'];
}
创建结构良好的JSON
答案 0 :(得分:1)
使用PHP对SQL的结果进行排序是正常的做法,所以你的方法是正确的。
$result = array();
foreach($query->result_array() as $row)
{
$result[$row['id']] = array(
'id'=>$row['id'],
'name'=>$row['name'],
'price'=>isset($result[$row['id']]['price']) ? array_push($result[$row['id']]['price'],$row['price']) : array($row['price'])
);
}
$this->output
->set_content_type('application/json')
->set_output(json_encode(array('products'=>array_values($result))));
答案 1 :(得分:0)
我会这样做(假设你的价格表中有多行)。与你的做法相比,我觉得这样做更干净。这可以是模型类中的方法
$this->db->select("id, name");
$this->db->from("product");
$q = $this->db->get();
$products = $q->result();
foreach ($products as $product) {
$this->db->select("price");
$this->db->from("prices");
$this->db->where("id_product", $product->id);
$q = $this->db->get();
$product->prices = $q->result();
}
$json = json_encode($products);
var_dump($json);