Php 从http\u build\u查询中删除编码字符
我正在尝试获取对象的JSON数组,并将其转换为HTTP查询 JSON是这样的:Php 从http\u build\u查询中删除编码字符,php,json,Php,Json,我正在尝试获取对象的JSON数组,并将其转换为HTTP查询 JSON是这样的: [ {"name": "Silvia"}, {"age": 24} ] ?0%5Bname%5D=Silvia&1%5Bage%5D=24 我需要转变成这样: ?name=Silvia&age=24 我试图使用'http_query_params(),但它返回的查询如下: [ {"name":
[
{"name": "Silvia"},
{"age": 24}
]
?0%5Bname%5D=Silvia&1%5Bage%5D=24
我需要转变成这样:
?name=Silvia&age=24
我试图使用'http_query_params(),但它返回的查询如下:
[
{"name": "Silvia"},
{"age": 24}
]
?0%5Bname%5D=Silvia&1%5Bage%5D=24
我尝试使用urldecode()
,但没有帮助
这是我的全部代码:
$jsonArray = json_decode($data['filters']);
$query = http_build_query($jsonArray, null, '&');
$url = $endpoint."?".$query;
这将是您问题的解决方案:)
这将是
?name=Silvia&age=24
而不是手动构建查询字符串,让我们按照应该的方式使用。但首先,让我们展平原始阵列
$jsonString = '[
{"name": "Silvia"},
{"age": 24}
]';
$jsonArray = json_decode($jsonString, true); // true flag converts to array instead of object
$assoc_array = array();
foreach($jsonArray AS $arr){
foreach($arr AS $key => $val) {
$assoc_array[$key] = $val;
}
}
这种回归
Array
(
[name] => Silvia
[age] => 24
)
现在创建查询字符串
$queryString = http_build_query($assoc_array);
echo urlencode($queryString); // you can actually skip this
它返回
name%3DSilvia%26age%3D24
正如你在书中看到的
这更“便携”,您可以使用演示的阵列展平方法制作函数。您需要的是一个简单的关联阵列。但是你有一个包含对象的数字索引数组。因此,首先将后者转换为前者。尽管如果将对象转换为数组,仍然会有一个多维数组。你需要把它展平,所以它只是
['name'=>'Silvia','age'=>24]
。如果要传递很多对象,只传递json本身可能会更幸运。然后,您必须找出$params
的来源,因为在您尝试使用它之前,它在任何地方都没有被提及??$params是json数组,很抱歉,这完全忽略了应用URL编码,对于这些参数名称或值中的任何一个都是必需的。