如何使用平面json结果数组创建PHP自定义嵌套json数组
我试图在遍历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; 我想要像这样的输出如何使用平面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=
{
"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; 我一直使用这种方法,对我来说效果很好 我希望,它会好起来