将平面索引数组转换为 URL 查询字符串

问题描述 投票:0回答:5

我有这个数组(

$recip
):

Array
(
    [0] => 393451234567
    [1] => 393479876543
)

SMS API 提供商需要以下格式的号码:

recipients[]=393334455666&recipients[]=393334455667

$recipients = implode('&recipients[]=',$recip);

我只能得到这个:

393471234567&recipients[]=393459876543

此输出缺少第一个键声明。

php arrays query-string
5个回答
2
投票

只需将首字母

recipients[]=
附加到字符串的前面:

$recipients = 'recipients[]=' . implode('&recipients[]=',$recip);

1
投票

您请求的字符串将作为查询字符串,但它不是 url 编码的查询字符串。 我将演示这两种变体的解决方案。 演示

对于与您想要的结果实际上相同的完全 url 编码的字符串,请使用本机 PHP 函数

http_build_query()
。 这将对方括号进行编码并显式声明数组每个元素的索引。

$array = ['393451234567', '393479876543'];

echo http_build_query(['recipients' => $array]);
recipients%5B0%5D=393451234567&recipients%5B1%5D=393479876543

或者,通过为每个数组值假装键分配字符串来实现您想要的结果,然后使用

&
进行内爆。

echo implode('&', substr_replace($array, 'recipients[]=', 0, 0));
recipients[]=393451234567&recipients[]=393479876543

0
投票

另一种选择:

foreach ($array as $key => $value){
    $array[$key] = (($key == 0) ? '' : '&').'recipients[]='.$value;
}
$result = implode('',$array);

foreach
循环允许您连接字符串。 我进行了一项检查,以避免在字符串的第一部分附加 &。

指出这是一个选项,但另一种方法更简单!


0
投票

试试这个:

vsprintf('recipients[]=%s&recipients[]=%s', $recip);

0
投票

另一种选择

foreach ($recip as $ip){
    $array[] = 'recipients[]=' . $ip;
}
$result = implode('&',$array);
© www.soinside.com 2019 - 2024. All rights reserved.