【问题标题】:Php Json encoding in while loop [duplicate]在while循环中进行Php Json编码[重复]
【发布时间】:2021-09-17 10:39:35
【问题描述】:

如何格式化下面的代码以在 php while 循环中创建一个用逗号分隔的 json 数组? 返回的 json 似乎无效,无法再次解码

<?php //database config
$rtv = mysqli_query($link, "SELECT * FROM ".$datatable." WHERE productid='".$id."' ");
while($bld =mysqli_fetch_assoc($rtv)){
    $date = $bld["timestamp"];                                     
    $data = [];
    $data[] =[
        "requestId" => $requestid,
        "Service" => $service,
        "Date" => $date
    ];
    echo json_encode($data, JSON_PRETTY_PRINT);

我得到的是


     [
        {
        "Id": "90223-1475789-2",
        "Service": "Maintenance",
        "Date": "2021-06-30 23:07:15"
       }
    ][
      {
        "Id": "90223-1475789-2",
        "Service": "Maintenance",
        "Date": "2021-06-30 23:07:15"
       }
     ]

而不是所需的格式


     [
       {
        "Id": "90223-1475789-2",
        "Service": "Maintenance",
        "Date": "2021-06-30 23:07:15"
       },
       {
        "Id": "90223-1475789-2",
        "Service": "Maintenance",
        "Date": "2021-06-30 23:07:15"
       }
     ]

【问题讨论】:

  • 在将 [] 分配给数据时将其从 array([...]) 中删除。除此之外,您为什么要获得两条记录?您是否在循环中将数组分配给data
  • 如果在循环中,可以push记录到数组中:$data[] = ["Id" =&gt; $requestid, "Service" =&gt; $service, "Date" =&gt; $date]
  • @showdev 这对我所拥有的没有任何影响。数组应该用逗号分隔,例如[{ "id" : "1"}, { "id" : "2"},.....]
  • @VasilisG。这是正在编写的代码的摘录,我删除了一些部分,因为它们在解决方案中不太重要。 “您是否将数组分配给循环中的数据?”这是什么意思?
  • 看起来你在循环中定义并输出$data。这意味着每个循环都会覆盖之前的$data 分配。循环前定义一次,循环后输出。

标签: php json


【解决方案1】:

您的代码返回多维数组而不是一个数组,因此您需要在编码之前合并数组尝试使用array_merge() 合并数组 功能 // 我假设这些来自数据库查询

$requestid =2;
$service ="cleaning";
$date ="Monday";



$requestid1 =3;
$service1 ="washing";
$date1 ="tuesday";


$data =array([
         "Id" => $requestid,
         "Service" => $service,
         "Date" => $date
    ],[
         "Id" => $requestid1,
         "Service" => $service1,
         "Date" => $date1
    ]);
    
    
    header("Content-Type: application/json; charset=UTF-8");
         echo json_encode(array_merge($data),true);

See the results here when you ran it

【讨论】:

    【解决方案2】:

    要获得您想要的输出,您需要在使用json_encode()之前创建一个数组并将数据推送到它上面

    <?php
    // Create an element
    // Some dummy data
    
    $requestid = "requestid";
    $service = "service";
    $date = "today";
    
    $data =[
                 "Id" => $requestid,
                 "Service" => $service,
                 "Date" => $date
            ];
    
    // Create a parent array
    $json = [];
    // Add the element to the array twice
    $json[] = $data;
    $json[] = $data;
    
    echo json_encode($json, JSON_PRETTY_PRINT);
    

    输出:

    [
        {
            "Id": "requestid",
            "Service": "service",
            "Date": "today"
        },
        {
            "Id": "requestid",
            "Service": "service",
            "Date": "today"
        }
    ]
    

    演示:https://3v4l.org/FlPuc

    【讨论】:

      【解决方案3】:

      看来您可能会在每次循环迭代时重新定义和输出$data。但是您似乎想要做的是在每次循环迭代时将数据附加到数组中,然后在循环后输出整个数组。

      这就是我认为你正在做的事情:

      while ( ... ) {
      
          $data =array([
              "Id" => $requestid,
              "Service" => $service,
              "Date" => $date
          ]);
          
          echo json_encode($data, JSON_PRETTY_PRINT);
      
      }
      

      而我推荐的是:

      $data = [];
      
      while ( ... ) {
      
          $data[] = [
              "Id" => $requestid,
              "Service" => $service,
              "Date" => $date
          ];
          
      }
      
      echo json_encode($data, JSON_PRETTY_PRINT);
      

      【讨论】:

      • 它成功了。谢谢
      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2018-04-08
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多