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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:09:03