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脚本,我需要JSON以不同的格式显示,并按顺序列出每个响应:

<?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没有。