我有下表:
-> +-----+---------+-----+-------+--------------+
-> | id1 | fname | id2 | fname | relationship |
-> +-----+---------+-----+-------+--------------+
-> | 4 | Albaraa | 5 | Sadi | Father |
-> +-----+---------+-----+-------+--------------+
我将以下内容分配给变量$ relations:
$relations = $stmt->fetchAll(PDO::FETCH_ASSOC);
最后,我使用以下方法打印出该变量的JSON编码:
echo json_encode($relations);
...我得到以下输出:
[{"id1":"4","fname":"Sadi","id2":"5","relationship":"Father"}]
所以这里有一些关于我得到的输出的问题:
1)你可以看到我的输出似乎不正确,因为它应该是这样的:
[{"id1":"4","fname":"Albaraa","id2":"5","fname":"Sadi","relationship":"Father"}]
为什么打印不正确,是否与表格有两个同名“fname”的列有关?如果有关于如何解决这个问题的任何意见,这将是惊人的!
2)我很想知道的另一件事是我真的想把JSON改成它变成这样的地方:
[{"id":"4","name":"Albaraa","id":"5","name":"Sadi","relationship":"Father"}]
是否有一种简单的方法可以将“id1”和“id2”更改为“id”并将“fname”更改为“name”?
再次对此提出的任何意见都将非常感谢!
答案 0 :(得分:5)
1)fname
被覆盖。尝试在SQL查询中使用不同的别名来匹配字段。
2)您不应传递确切的名称匹配属性。它们可能被JSON解码器所覆盖。最好将它们作为不同的JSON部分传递。
[{"id":"4","name":"Albaraa","id":"5","name":"Sadi","relationship":"Father"}]
应该像:
{
"person1":{"id":4,"name":"Albaraa"},
"person2":{"id":5,"name":"Sadi"},
"relationship":"Father"
}
<强> UPDv1:强>
结果:
-> +-----+---------+-----+--------+--------------+
-> | id1 | fname1 | id2 | fname2 | relationship |
-> +-----+---------+-----+--------+--------------+
-> | 4 | Albaraa | 5 | Sadi | Father |
-> +-----+---------+-----+--------+--------------+
尝试像这样转换:
<?php
// $row is sql fetched row.
$person1 = array('id' => $row['id1'], 'name' => $row['fname1']);
$person2 = array('id' => $row['id2'], 'name' => $row['fname2']);
$response = array(
'person1' => $person1,
'person2' => $person2,
'relationship' => $row['relationship']
);
echo json_encode($response);
?>