You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何访问JSON结构中的嵌套数组time_array?

正确访问JSON嵌套数组的PHP方法

我来帮你排查问题——你的代码里有两个关键错误导致无法正确读取time_array的元素,还有一个需要重视的安全风险,下面一步步拆解并修正:

问题根源分析

  1. 重复解码JSON:
    你第一次调用json_decode($requestBody, TRUE)时,第二个参数TRUE已经把整个JSON字符串转换成了PHP关联数组。这意味着$requestBody['time_array']本身就是一个合法的PHP数组,不需要再用json_decode($time_array, True)二次解码——这会让$json_array变成null或者无效值,自然遍历不出内容。

  2. 错误的元素访问方式:
    因为你用了json_decode(..., TRUE)转成了关联数组,所以不能用对象的->语法访问元素,必须用数组下标['key']的方式。

  3. SQL注入风险:
    你的INSERT语句直接把变量拼接进SQL字符串,这是非常危险的做法,很容易被攻击者利用进行SQL注入攻击,必须改用预处理语句。

修正后的完整代码

// 获取请求体并解码为关联数组
$requestBody = file_get_contents('php://input');
$requestData = json_decode($requestBody, TRUE);

// 直接获取嵌套的time_array数组(无需二次解码)
$timeArray = $requestData['time_array'];
// 从请求数据中获取provider_id(假设你之前的$provider_id来自这里)
$providerId = $requestData['provider_id'];
// 示例日期和状态,根据你的实际逻辑调整
$currentDate = date('Y-m-d');
$status = 'active';

// 遍历time_array中的每一项
foreach ($timeArray as $timeItem) {
    $day = $timeItem['day'];
    $startTime = $timeItem['start_time'];
    $endTime = $timeItem['end_time'];

    // 使用mysqli预处理语句防止SQL注入
    $stmt = mysqli_prepare($con, "INSERT INTO `nesbaty_working_time` 
        (`provider_id`, `day`, `opening_time`, `closing_time`, `time`, `status`) 
        VALUES (?, ?, ?, ?, ?, ?)");
    
    // 绑定参数,"ssssss"表示6个字符串类型的参数
    mysqli_stmt_bind_param($stmt, "ssssss", $providerId, $day, $startTime, $endTime, $currentDate, $status);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
}

可选:用对象方式访问JSON数据

如果你更习惯用对象的->语法访问元素,可以去掉json_decode的第二个参数TRUE,此时整个JSON会被转成PHP对象,代码调整如下:

$requestBody = file_get_contents('php://input');
// 解码为PHP对象(无第二个参数)
$requestData = json_decode($requestBody);

$timeArray = $requestData->time_array;
$providerId = $requestData->provider_id;

foreach ($timeArray as $timeItem) {
    $day = $timeItem->day;
    $startTime = $timeItem->start_time;
    $endTime = $timeItem->end_time;
    // 预处理语句部分和上面一致
}

两种方式都能正常工作,选你觉得顺手的风格就好,但一定要保持统一——不要混合使用数组下标和对象属性的访问方式。

内容的提问来源于stack exchange,提问作者Jayvirsinh Vaghela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:58