我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了名称和他们最喜欢的NBA球队(以及id作为数据库的主键)。我编写并运行以下php脚本从数据库中检索这些数据并将它们投影到我的本地Web服务器(XAMPP)上:
<?php
$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
header('Content-Type: application/json');
$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
$arr = [];
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$arr[] = $row;
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
然而,通过这种方式,我采用了这个json输出:
[...,
{
"id": "1",
"name": "David Belton",
"team": "["Boston Celtics", "Houston Rockets"]"
},
...]
但我想采取以下json输出:
[...,
{
"id": "1",
"name": "David Belton",
"team": ["Boston Celtics", "Houston Rockets"]
},
...]
因此,我想[Boston Celtics", "Houston Rockets"]
为"team"
取一个数组,而不是"[Boston Celtics", "Houston Rockets"]"
,这是一个文本。
请注意,在数据库的列组中,值存储为["Boston Celtics", "Houston Rockets"]
(不是json),即文本/字符串。
如何使用PHP轻松完成此操作?
答案 0 :(得分:1)
因为它看起来像json(虽然坏了),你可以在将它应用到数组之前解码它。
像:
$arr = [];
if ($resultCheck > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$row['team'] = json_decode($row['team'])
$arr[] = $row;
}
}
echo json_encode($arr, JSON_PRETTY_PRINT);
但如果它不是json,你可能需要做更多的工作。这就是你应该规范化数据库而不是在同一列中存储多个值的原因。