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

如何将JavaScript对象转为PHP数组并获取原始字符串?

解决方案

你之前的问题核心在于两点:一是json_decode默认返回PHP对象而非数组,直接转字符串无法生成目标格式;二是缺少专门的数组到目标PHP数组字符串的转换逻辑。以下是可行的实现方案:

// 核心转换函数:将PHP关联数组转为目标格式的字符串
function array_to_php_array_string($array, $indent = 0) {
    $indentStr = str_repeat('  ', $indent);
    $output = $indentStr . "[\n";
    
    $entries = [];
    foreach ($array as $key => $value) {
        $keyStr = is_string($key) ? "\"$key\"" : $key;
        if (is_array($value)) {
            $valueStr = array_to_php_array_string($value, $indent + 1);
            $entries[] = $indentStr . '  ' . "$keyStr => $valueStr";
        } else {
            // 字符串值加引号,数字/布尔值直接输出
            $valueStr = is_string($value) ? "\"$value\"" : var_export($value, true);
            $entries[] = $indentStr . '  ' . "$keyStr => $valueStr";
        }
    }
    
    $output .= implode(",\n", $entries) . "\n";
    $output .= $indentStr . "]";
    
    return $output;
}

// REST接口处理函数
function convert_js_object_to_php(WP_REST_Request $request) {
    // 获取传递的JSON字符串
    $jsonStr = $request->get_header('js_object');
    
    // 解析为PHP关联数组(第二个参数true是关键)
    $phpArray = json_decode($jsonStr, true);
    
    if ($phpArray === null) {
        // JSON解析失败时返回标准错误
        return new WP_Error('invalid_json', '无效的JSON字符串', ['status' => 400]);
    }
    
    // 转换为目标格式的字符串并返回
    return array_to_php_array_string($phpArray);
}

代码说明

  1. json_decode参数设置:第二个参数传true,会把JSON对象解析为PHP关联数组,而非默认的stdClass对象,这是后续格式转换的基础。
  2. 递归转换逻辑:
    • 通过缩进参数控制嵌套层级,保证输出格式和你期望的对齐一致
    • 自动为字符串类型的键和值添加双引号,符合PHP语法规范
    • 用=>连接键值对,生成标准的PHP短数组格式
  3. 错误处理:增加了JSON解析失败的判断,返回WordPress标准错误响应,避免无意义的返回值。

测试输出

用你提供的JS对象JSON字符串测试,会生成如下结果:

[
  "name" => "A Name",
  "_typography" => [
    "color" => [
      "hex" => "#2196f3"
    ],
    "text-transform" => "uppercase",
    "font-weight" => "600"
  ]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:25