在对接 API 接口的时候,我们常常使用 http_build_query 函数来拼接参数。但是,这个函数会对空值做过滤和转换,不小心的话,很容易踩坑。

下面演示执行:

$args = [
    'key1' => 0,
    'key2' => '',
    'key3' => '0',
    'key4' => [],
    'key5' => null,
    'key6' => false,
    'key7' => true
];
$str = http_build_query($args);
echo $str;

输出结果为:

key1=0&key2=&key3=0&key6=0&key7=1

根据以上结果,可知 http_build_query 的处理逻辑为:

  1. 数字 0 转换后变成字符串 0
  2. 空字符串转换后仍被保留
  3. 字符串 0 转换为字符串 0
  4. 空数组的 key 会被丢弃(多维数组也是如此)
  5. null 值的 key 会被丢弃
  6. 布尔值 false 转换后变成字符串 0
  7. 布尔值 true 转换后变成字符串 1

所以,我们在使用 http_build_query 函数的时候,要特别注意空数组和 null 值的情况,避免踩坑。