[英]Get nested/hierarchical JSON from array/PHP
我有一個功能:
function getROLES() {
$sql = "
SELECT wur.role_id, wur.user_id, wu.first_name, wu.last_name
FROM user_roles wur LEFT JOIN users wu ON wur.user_id = wu.user_id
WHERE wur.role_id IN (100,101)
";
try {
$db = getConnection();
$stmt = $db->query($sql);
$roles = $stmt->fetchAll(PDO::FETCH_ASSOC);
$db = null;
echo json_encode($roles);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
這個函數的輸出是一個數組和JSON
陣:
Array (
[0] => Array
( [role_id] => 100 [user_id] => 1 [first_name] => Al [last_name] => Pacino )
[1] => Array
( [role_id] => 100 [user_id] => 5 [first_name] => Brad [last_name] => Pitt )
[2] => Array
( [role_id] => 101 [user_id] => 12 [first_name] => Pierce [last_name] => Brosnan )
[3] => Array
( [role_id] => 101 [user_id] => 10 [first_name] => Johnny [last_name] => Deep )
[4] => Array
( [role_id] => 101 [user_id] => 11 [first_name] => Tom [last_name] => Hanks )
) 1
JSON:
[
{"role_id":100,"user_id":1,"first_name":"Al","last_name":"Pacino"},
{"role_id":100,"user_id":5,"first_name":"Brad","last_name":"Pitt"},
{"role_id":101,"user_id":12,"first_name":"Pierce","last_name":"Brosnan"},
{"role_id":101,"user_id":10,"first_name":"Johnny","last_name":"Deep"},
{"role_id":101,"user_id":11,"first_name":"Tom","last_name":"Hanks"}
]
問題是:如何識別屬於每個role_id的所有用戶組。 如何轉換或更改ouput JSON上的代碼,如下所示:
[
{"role_id":100, "childrens":
[
{"user_id":1,"first_name":"Al","last_name":"Pacino"},
{"user_id":5,"first_name":"Brad","last_name":"Pitt"}
],
{"role_id":101, "childrens":
[
{"user_id":12,"first_name":"Pierce","last_name":"Brosnan"},
{"user_id":10,"first_name":"Johnny","last_name":"Deep"},
{"user_id":11,"first_name":"Tom","last_name":"Hanks"}
]
]
在此先感謝您的幫助。
請注意我使用Postgresql 9.1.8
首先要考慮的是jsut循環數據集並創建所需的結構:
$jsonRoles = array();
foreach($roles as $role) {
$id = $role['role_id'];
if(!isset($jsonRoles[$id])) {
$jsonRoles[$id] = array(
'role_id' => $id,
'childrens' => array()
);
}
unset($role['role_id']);
$jsonRoles[$id]['childrens'][] = $role;
}
// then to get a regular array use array values:
echo json_encode(array_values($jsonRoles));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.