搜索了这么久但没有得到任何可行答案。
A)输入:
$array = array(
'order_source' => array('google','facebook'),
'order_medium' => 'google-text'
);
看起来像:
Array
(
[order_source] => Array
(
[0] => google
[1] => facebook
)
[order_medium] => google-text
)
B)要求的输出:
order_source = Google的安培; order_source = Facebook和安培; order_medium =谷歌的文本
C)我尝试过的内容(http://3v4l.org/b3OYo):
$arr = array('order_source' => array('google','facebook'), 'order_medium' => 'google-text');
function bqs($array, $qs='')
{
foreach($array as $par => $val)
{
if(is_array($val))
{
bqs($val, $qs);
}
else
{
$qs .= $par.'='.$val.'&';
}
}
return $qs;
}
echo $qss = bqs($arr);
D)我得到了什么:
order_medium =谷歌文本&安培;
注意:它也适用于 http_build_query()
等任何单维数组。
答案 0 :(得分:8)
我希望这是你正在寻找的,它适用于单维到n维的数组。
$walk = function( $item, $key, $parent_key = '' ) use ( &$output, &$walk ) {
is_array( $item )
? array_walk( $item, $walk, $key )
: $output[] = http_build_query( array( $parent_key ?: $key => $item ) );
};
array_walk( $array, $walk );
echo implode( '&', $output ); // order_source=google&order_source=facebook&order_medium=google-text
答案 1 :(得分:1)
虽然您在评论中发现如果您尝试将其作为$_GET
传递,您将遇到覆盖问题,但使用递归函数获得所需结果的问题的解决方案将是:
function bqs($array, $qs='',$index = false)
{
foreach($array as $par => $val)
{
if($index)
$par = $index;
if(is_array($val))
{
$qs = bqs($val, $qs,$par);
}
else
{
$qs .= $par.'='.$val.'&';
}
}
return $qs;
}
我正在整理$qs
字符串,如果它是一个数组,并将索引作为参考传递,如果它是一个array()
<强>固定强> 提供$ index后,您不需要再次连接。见这里:http://3v4l.org/QHF5G
答案 2 :(得分:1)
你真的不需要在这里做任何特别的事情。
$array = array(
'order_source' => array('google', 'facebook'),
'order_medium' => 'google-text'
);
$qss = http_build_query($array);
另一方面:
var_dump($_GET);
结果:
array(2) {
["order_source"]=>
array(2) {
[0]=>
string(6) "google"
[1]=>
string(8) "facebook"
}
["order_medium"]=>
string(11) "google-text"
}
这确实是将数组作为GET变量发送的最佳方式。
如果您必须拥有已定义的输出,则可以执行此操作:
function bqs($array, $qs = false) {
$parts = array();
if ($qs) {
$parts[] = $qs;
}
foreach ($array as $key => $value) {
if (is_array($value)) {
foreach ($value as $value2) {
$parts[] = http_build_query(array($key => $value2));
}
} else {
$parts[] = http_build_query(array($key => $value));
}
}
return join('&', $parts);
}