[英]Converting data returned from mysql query to json(tree based)
這個問題也已經提過,但是我猜沒有人回答。
可以說mysql查詢返回的結果如下
name | id
tarun | 1
tarun | 2
tarun | 3
現在,如果我們執行標准的json編碼,我將得到如下內容:
[{"name":"tarun","id":"1"},{"name":"tarun","id":"2"},{"name":"tarun","id":"3"}]
但是我輸出如下
[{"name" : "tarun", "ids" : [{"id": "1"},{"id": "2"},{"id": "3"}]}]
請忽略我的語法錯誤(如果有的話),但是我希望我的問題有意義。 我使用PHP作為后端腳本語言。
你可能正在做類似的事情
SELECT name, id FROM ...
和
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
給定您想要的結構,
$data[$row['name']]['ids'][] = array('id' => $row['id']);
這不會為您提供確切的結構,但是會將所有id作為子數組放在tarun
字段值作為鍵的數組下。
擴展@Marc B的答案
// Getting per person id's list
$people = array();
while ($row = mysql_fetch_assoc($result)) {
$people[$row['name']][] = array('id' => $row['id']);
}
// Encoding as JSON
$output = "[";
foreach ($people as $name => $ids) {
$output .= '{"name" : "'.$name.'", ids: [';
foreach ($ids as $key => $id) {
$output .= '{"id" : "'.$id.'"},';
}
rtrim($output, ",");
$output .= ']},';
}
rtrim($output, ",");
$output .= ']';
echo $output;
上面的解決方案特定於該問題。 在我看來,解決此問題的通用JSON Encode方法非常困難或不可能。
我建議使用按名稱排序的查詢來進行查詢,然后在閱讀行時,只需簡單檢查一下$ row ['name']是否已更改,如果已更改,請將您收集的id添加到php對象中。
$curName="";
$curIds=array();
$betterJ=array();
$result = mysql_query ("SELECT name,id FROM mytable WHERE 1 ORDER BY NAME);
while($row=mysql_fetch_array($result)
{
if($curName=="")
$curName=$row['name']
if($row['name']!=$curName){
$betterJ[]=array($name=>$curName,$ids=>$Ids)
$curName=$row['name']
$curIds=array()
}
$Ids[]=$row['id];
}
$betterJ[]=array($name=>$curName,$ids=>$Ids);
echo json_encode($betterJ);
自從我在這里寫出來以來,這可能有錯別字,但是它應該產生json
[ [name:"tarus1",ids:[1,2,3]], [name:"tarus2",ids:[4,5,6], ... ]
您可以在html等模板中很好地工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.