【发布时间】:2014-12-21 05:42:43
【问题描述】:
搜索了这么久,但没有得到任何可行的答案。
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=google-text
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=google-text&
注意:它也应该适用于像 http_build_query() 这样的任何一维数组。
【问题讨论】:
-
抱歉,这完全没有意义:
order_source=google&order_source=facebook你用第二个覆盖了order_sourceGET 变量,所以你不会得到第一个?可行的是:order_source[]=google&order_source[]=facebook -
不确定你打算用它做什么,但是因为你提到了
http_build_query一个注释:order_source=google&order_source=facebook是行不通的 -
我会解释的。这是一个订单管理系统,用户在其中单击多个链接,它的作用类似于 Excel 工作表中的过滤器。类似的东西。
-
@JaredFarrish:是的。我知道它会覆盖,因此我已经编写了一个函数,它将整个查询字符串作为输入并给出一个多维数组作为输出。
-
为什么? PHP 已经将
order_status[]=google语法理解为数组。另一个可能更简单的选择是对您的数组进行 JSON 编码并将其作为变量传递,然后将json_decode()它返回到服务器上的数组。
标签: php recursion multidimensional-array query-string