【问题标题】:fetching multiple rows and display in json获取多行并以json显示
【发布时间】:2020-08-08 12:13:18
【问题描述】:

我有一个 PHP 代码,例如:

while ($row2 = mysqli_fetch_assoc($check2)) {
  // $leadarray[] = $row2;
  $service_id[$i] = $row2['service_id'];
  $row1['service_id'][$i] = $service_id[$i];
  $service_name[$i] = $row2['service_name'];
  $row1['service_name'][$i] = $service_name[$i];
  $i++;
}
$leadarray[] = $row1;
$trimmed1['leaddetails'] = str_replace('\r\n', '', $leadarray);
echo json_encode($trimmed1);

得到类似的输出

{
  "leaddetails": [
    {
      "service_id": [
        "7",
        "2"
      ],
      "service_name": [
        "Past Control Services",
        "Civil Finishing"
      ],
    }
  ]
}

我想要这样的输出:

"service_id": [
  1:  "7",
  2: "2"
],
"service_name": [
  1: "Past Control Services",
  2: "Civil Finishing"
],

或

[
  "service_id":  "7",
  "service_name": "Past Control Services",
  "service_id":  "2",
  "service_name": "Civil Finishing",
]

【问题讨论】:

  • 第二个选项是不可能的,一个数组不能有重复的键。
  • [ "service_id1": "7", "service_name1": "Past Control Services", "service_id2": "2", "service_name2": "Civil Finishing", ] 这个选项是可能的还是不行?
  • 如何为这个输出编写代码?
  • 添加这1、2有什么意义?与 0、1 相同。

标签: php json mysqli


【解决方案1】:

$trimmed1 在传递给json_encode(PHP 中的关联数组)时被认为是一个对象,因为您明确地给它一个键(在 JSON 中被认为是一个对象属性):

$trimmed1 = [];
$trimmed1['leaddetails'] = 'foobar';

这将导致json_encode 将$trimmed1 编码为一个对象:

{
   "leaddetails": "foobar"
}

为了获得您想要的结果,将$trimmed1 传递给json_encode 时将其视为一个数组。

$trimmed1[] = str_replace('\r\n', '', $leadarray); // push instead of assign

【讨论】:

    【解决方案2】:

    第二个选项是不可能的 你可以这样 [{"service_id":"7", "service_name":"Past Control Services"}, {"service_id":"2", "service_name":"Civil Finishing"}]

    【讨论】:

    • 使用类 ex: class Data{ $service_id; $service_name; } $obj = new Array(); while ($row2 = mysqli_fetch_assoc($check2)){ $data = new Data(); $data->service_id = $row2['service_id']; $data->service_name = $row2['service_name']; array_push($obj, $data); } echo json_encode($obj);
    • 请编辑您的答案以添加正确格式的代码。
    【解决方案3】:
    [{"service_id":"7", "service_name":"Past Control Services"}, {"service_id":"2", "service_name":"Civil Finishing"}]
    

    使用类来制作这样的东西

    class Data{ 
      $service_id; 
      $service_name; 
    } 
    
    $obj = new Array(); 
    while ($row2 = mysqli_fetch_assoc($check2)){ 
      $data = new Data(); 
      $data->service_id = $row2['service_id']; 
      $data->service_name = $row2['service_name']; 
      array_push($obj, $data); 
    } 
    echo json_encode($obj);
    

    【讨论】:

    • 这段代码糟糕透了。你能帮我把这段代码转换成程序化编程吗?
    【解决方案4】:

    首先创建二维数组。然后在循环期间推入嵌套数组。

    $result = ["service_id" => [], "service_name" = []];
    while ($row2 = mysqli_fetch_assoc($check2)) {
        $result["service_id"][] = $row["service_id"];
        $result["service_name"][] = $row["service_name"];
    }
    echo json_encode($result);
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2021-03-12
      • 2015-02-06
      • 2017-06-04
      相关资源
      最近更新 更多