如何将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); }
代码说明
json_decode参数设置:第二个参数传true,会把JSON对象解析为PHP关联数组,而非默认的stdClass对象,这是后续格式转换的基础。- 递归转换逻辑:
- 通过缩进参数控制嵌套层级,保证输出格式和你期望的对齐一致
- 自动为字符串类型的键和值添加双引号,符合PHP语法规范
- 用
=>连接键值对,生成标准的PHP短数组格式
- 错误处理:增加了JSON解析失败的判断,返回WordPress标准错误响应,避免无意义的返回值。
测试输出
用你提供的JS对象JSON字符串测试,会生成如下结果:
[ "name" => "A Name", "_typography" => [ "color" => [ "hex" => "#2196f3" ], "text-transform" => "uppercase", "font-weight" => "600" ] ]
内容的提问来源于stack exchange,提问作者Vueer
相关产品推荐
相关产品推荐

