PHP有无内置函数或库可生成点号分隔格式的HTTP POST参数
方案说明
- PHP没有内置的原生函数可以直接实现该转换需求,你可以选择自行实现递归逻辑,也可以使用第三方成熟工具类完成转换。
1. 原生递归实现
你可以通过递归遍历多维数组,将嵌套的键拼接为点分隔的一维键,得到扁平化数组后自行拼接POST参数即可,示例代码如下:
function arrayToDot(array $array, string $prefix = ''): array { $result = []; foreach ($array as $key => $value) { $newKey = $prefix === '' ? (string)$key : $prefix . '.' . (string)$key; if (is_array($value) && !empty($value)) { $result = array_merge($result, arrayToDot($value, $newKey)); } else { $result[$newKey] = $value; } } return $result; } // 调用示例 $source = json_decode('你的JSON字符串', true); $dotArray = arrayToDot($source); // 自行拼接POST参数,规避http_build_query自动替换点为下划线的问题 $postParams = []; foreach ($dotArray as $key => $value) { $postParams[] = urlencode($key) . '=' . urlencode($value); } $postStr = implode('&', $postParams);
2. 第三方工具实现
常用的PHP工具库illuminate/support(Laravel框架的支持组件)提供了现成的Arr::dot()方法可以直接完成多维数组到点分隔一维数组的转换,如果你没有使用Laravel框架,也可以单独安装该组件使用。
调用示例如下:
use Illuminate\Support\Arr; $source = json_decode('你的JSON字符串', true); $dotArray = Arr::dot($source); // 后续拼接参数逻辑和原生实现方案一致
注意:不要直接使用
http_build_query处理转换后的点分隔键数组,PHP的http_build_query方法默认会把键名中的.替换为_,导致不符合你的格式要求。
内容的提问来源于stack exchange,提问作者MrC0mm0n
相关产品推荐
相关产品推荐

