如何使用平面json结果数组创建PHP自定义嵌套json数组

如何使用平面json结果数组创建PHP自定义嵌套json数组,php,arrays,json,Php,Arrays,Json,我试图在遍历db查询结果数组时创建自定义json对象数组。 但是,我无法从代码中获得正确的响应 我尝试过创建数组并遍历它。下面是我的代码,展示了我所做的一切。 另外,我是php的新手,所以,如果这是新手犯的错误或其他什么,我很抱歉 $response=数组; 而$row=$result->fetch\u assoc{ $flag=false; $sample_obj=json_encodejson_decode{}; $index=0; $length=count$response; 对于$x=

我试图在遍历db查询结果数组时创建自定义json对象数组。 但是,我无法从代码中获得正确的响应

我尝试过创建数组并遍历它。下面是我的代码,展示了我所做的一切。 另外,我是php的新手,所以,如果这是新手犯的错误或其他什么,我很抱歉

$response=数组; 而$row=$result->fetch\u assoc{ $flag=false; $sample_obj=json_encodejson_decode{}; $index=0; $length=count$response; 对于$x=0;$x<$length;$x++{ 如果$response[$x]->session\u id==$row->session\u id{ $sample_obj=$row; $flag=true; $index=$x; 打破 } } 如果$flag==true{ $sample_array=数组; $sample_array[]=$row; $response[$index]->sessions[]=$row; }否则{ $sample_array=数组; $sample_array[]=$row; $sample\u obj[session\u id]=$row->session\u id; $sample_obj[sessions]=数组; $sample\u obj[sessions]=$sample\u数组; $response[]=$sample\u obj; } //$response[]=$row; } $res[statusCode]=201; $res[success]=true; $res[records\u found]=true; $res[结果]=$response; 标题的内容类型:application/json;字符集:utf-8’; echo json_encode$res,json_PRETTY_PRINT; 我想要像这样的输出

{
    "statusCode": 201,
    "success": true,
    "records_found": true,
    "results": [
        {
            "session_id" : 1,
             "sessions"  : [
              {
                   "session_id" : 1,
                   "creation_time" : "some_timestamp",
                    "active_session" : true
              },

              {
                   "session_id" : 1,
                   "creation_time" : "some_timestamp",
                    "active_session" : false
              },

              {
                   "session_id" : 1,
                   "creation_time" : "some_timestamp",
                    "active_session" : false
              }
              ]
        }
    ]
}

但是我得到了非常错误的输出,比如:

{
    "statusCode": 201,
    "success": true,
    "records_found": true,
    "results": [
        "A}"
    ]
}

我不知道为什么显示的是A},而不是我的会话数组。

下面的一行导致错误

    $sample_obj = json_encode(json_decode("{}"));
将其替换为:

 $sample_obj = [];
这样可以解决问题

签出以下工作示例:

<?php
$response = array();
while($row = $result->fetch_assoc()){
    $flag = false;
    $sample_obj = [];
    $index = 0;
    $length = count($response);
    for($x = 0; $x < $length; $x++){
        if($response[$x]->session_id == $row->session_id){
            $sample_obj = $row;
            $flag = true;
            $index = $x;
            break;
        }
    }
    if($flag == true){
        $sample_array = array();
        $sample_array[] = $row;
        $response[$index]->sessions[] = $row;
    } else {
        $sample_array = array();
        $sample_array[] = $row;
        $sample_obj["session_id"] = $row->session_id;
        $sample_obj["sessions"] = array();
        $sample_obj["sessions"] = $sample_array;
        $response[] = $sample_obj;
    }
    // $response[] = $row;
}
$res["statusCode"] = 201;
$res["success"] = true;
$res["records_found"] = true;
$res["results"] = $response;
header('Content-Type: application/json;charset:utf-8');
echo json_encode($res,JSON_PRETTY_PRINT);
或使用样本数据:

$rows = [(object)['session_id' => 1]];
$response = [(object)['session_id' => 2]];
foreach($rows as $row){
    $flag = false;
    $sample_obj = [];
    $index = 0;
    $length = count($response);
    for($x = 0; $x < $length; $x++){
        if($response[$x]->session_id == $row->session_id){
            $sample_obj = $row;
            $flag = true;
            $index = $x;
            break;
        }
    }
    if($flag == true){
        $sample_array = array();
        $sample_array[] = $row;
        $response[$index]->sessions[] = $row;
    } else {
        $sample_array = array();
        $sample_array[] = $row;
        $sample_obj["session_id"] = $row->session_id;
        $sample_obj["sessions"] = array();
        $sample_obj["sessions"] = $sample_array;
        $response[] = $sample_obj;
    }
    // $response[] = $row;
}
$res["statusCode"] = 201;
$res["success"] = true;
$res["records_found"] = true;
$res["results"] = $response;
header('Content-Type: application/json;charset:utf-8');
echo json_encode($res,JSON_PRETTY_PRINT);

您可以在php数组中预先编写所需内容,如下所示:

$arr=数组 val_1=>value1, val_2=>value2, val_3=>数组 moreVals=>另一个值, smtng=>smtng ; 然后将其转换为json,如下所示:

$json=json_encode$arr,json_PRETTY_PRINT | json_FORCE_OBJECT; 我一直使用这种方法,对我来说效果很好

我希望,它会好起来