使用PHP将分层数据转换为JSON树

时间:2015-04-17 06:09:26

标签: php json postgresql

我有PostgreSQL函数(树结构),我需要将输出转换为json树格式。

我的PostgreSQL功能

RETURN QUERY
WITH RECURSIVE manger_hierarchy(e_id,e_name,m_name,m_id) AS 
(
    SELECT 
        e.emp_id,e.emp_name,
        m.emp_name AS man_name,e.emp_man_id 
    FROM emp_det e 
    LEFT JOIN emp_det m ON e.emp_man_id=m.emp_id
    WHERE e.emp_id = id
    UNION
    SELECT 
        rp.emp_id,rp.emp_name,
        mh.e_name AS manager,rp.emp_man_id
    FROM manger_hierarchy mh
    INNER JOIN emp_det rp ON mh.e_id = rp.emp_man_id
)
SELECT h.e_id,h.e_name,h.m_name,h.m_id
FROM manger_hierarchy h;

我的php脚本

header('Content-Type: application/json'); $dbconn=pg_connect('host=localhost port=5432 dbname=test1 user=someuser password=somepass'); $x=$_GET['id']; $result=pg_query($dbconn,"SELECT * FROM employe_manager_details($x)"); $y=pg_fetch_all($result); echo json_encode($y, JSON_PRETTY_PRINT); pg_close($dbconn);

我目前的结果 [ { "e_id": "4", "e_name": "john", "e_manager": "steve", "e_man_id": "2" }, { "e_id": "8", "e_name": "jake", "e_manager": "john", "e_man_id": "4" }, { "e_id": "9", "e_name": "wilson", "e_manager": "john", "e_man_id": "4" } ] 期待结果

[ { "e_id": "4", "e_name": "john", "e_manager": "steve", "e_man_id": "2" }, { "e_id": "8", "e_name": "jake", "e_manager": "john", "e_man_id": "4" }, { "e_id": "9", "e_name": "wilson", "e_manager": "john", "e_man_id": "4" } ]

2 个答案:

答案 0 :(得分:0)

你把这个渲染成html我猜。那是对的吗?将输出包装在<pre></pre>标签中。

试试这个:

echo '<pre>'.json_encode($y, JSON_PRETTY_PRINT).'</pre>';

答案 1 :(得分:0)

Haven未触及pgsql多年,所以不确定是否有一个函数来获取由给定列的值键入的返回数据。但是所有结果都在php变量中,你可以这样做:

$results = pg_fetch_all($result);
$ordered_results = array();
foreach ($results as $result) {
  $ordered_results[$result['e_man_id']][] = $result;
}
echo json_encode($ordered_results, JSON_PRETTY_PRINT);

那将包括&#34; e_man_id&#34;返回的json的第一级中的值,并且将按照您所期望的那样嵌套值。

我不知道json_encode()中的任何选项会让你自动执行此操作。