Php 生成正确的JSON数组响应时出现问题
基本上,我有以下基于查询输出生成响应的PHP脚本,我需要JSON以不同的格式显示,并按顺序列出每个响应:Php 生成正确的JSON数组响应时出现问题,php,json,Php,Json,基本上,我有以下基于查询输出生成响应的PHP脚本,我需要JSON以不同的格式显示,并按顺序列出每个响应: <?php $stmt = $pdo->prepare(' SELECT `table1`.`id`, `table1`.`option` FROM `table1` WHERE `table1`.`source` = 1 '); $stmt->execute([ ]); $row =
<?php
$stmt = $pdo->prepare('
SELECT
`table1`.`id`,
`table1`.`option`
FROM `table1`
WHERE `table1`.`source` = 1
');
$stmt->execute([
]);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
$rowcount = $stmt->rowCount();
if ($rowcount < 1)
{
$response["error"] = true;
echo json_encode($response);
}
else
{
$response['error'] = false;
$response['reasons'] = array_column($row, 'option', 'id');
echo json_encode($response);
}
?>
{
"error": false,
"reasons": {
"10": "Messy",
"23": "Damaged",
"48": "Other"
}
}
{
"error": false,
"reasons": [
"1":{ "id": 10
"reason": "Messy"
}
"2":{ "id": 23
"reason": "Damaged"
}
"3":{ "id": 48
"reason": "Other"
}
]
}
我想要的回应:
<?php
$stmt = $pdo->prepare('
SELECT
`table1`.`id`,
`table1`.`option`
FROM `table1`
WHERE `table1`.`source` = 1
');
$stmt->execute([
]);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
$rowcount = $stmt->rowCount();
if ($rowcount < 1)
{
$response["error"] = true;
echo json_encode($response);
}
else
{
$response['error'] = false;
$response['reasons'] = array_column($row, 'option', 'id');
echo json_encode($response);
}
?>
{
"error": false,
"reasons": {
"10": "Messy",
"23": "Damaged",
"48": "Other"
}
}
{
"error": false,
"reasons": [
"1":{ "id": 10
"reason": "Messy"
}
"2":{ "id": 23
"reason": "Damaged"
}
"3":{ "id": 48
"reason": "Other"
}
]
}
如何做到这一点?”
更新:
调用:$response['reasons']=$row代码>
得到以下结果:
{
"error": false,
"reasons": [
{
"id": 10,
"reason": "Messy"
},
{
"id": 23,
"reason": "Damaged"
},
{
"id": 48,
"reason": "Other"
}
]
}
如何使序列号显示在每行结果之前
"1":{
"id": 10,
"reason": "Messy"
},
如果需要索引从1而不是0开始,则需要编写一个分配键的循环
$reasons = [];
foreach ($row as $i => $r) {
$reasons[$i+1] = $r;
}
$response['reasons'] = $reasons;
如果需要索引从1而不是0开始,则需要编写一个分配键的循环
$reasons = [];
foreach ($row as $i => $r) {
$reasons[$i+1] = $r;
}
$response['reasons'] = $reasons;
不要调用array\u column
,只需使用$row
好的,这非常接近我需要的,是否可以在每行结果之前显示序列号?这些数字应该是结果的计数。请看我更新的帖子。所以你需要索引从1
开始,而不是从0
开始?是的,它们必须从1开始。你需要编写自己的循环来分配索引,因为数组默认从0开始。不要调用array\u column
,只需使用$row
好的,这非常接近我的需要,是否可以在每行结果之前显示序列号?这些数字应该是结果的计数。请参阅我更新的帖子。因此,您需要索引从1
开始,而不是从0
开始?是的,它们必须从1开始。您需要编写自己的分配索引的循环,因为数组默认从0开始。谢谢,这就是我正在寻找的。感谢您的帮助是否有办法将“原因”:{
替换为方括号?“原因”:[
否。JSON数组没有键,只有对象有键。PHP有关联数组,JSON和JavaScript没有。谢谢您,这就是我要找的。我感谢您的帮助是否有办法替换“原因”:{
带方括号?“原因”:[
否。JSON数组没有键,只有对象有键。PHP有关联数组,JSON和JavaScript没有。