Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从http\u build\u查询中删除编码字符_Php_Json - Fatal编程技术网

Php 从http\u build\u查询中删除编码字符

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":

我正在尝试获取对象的JSON数组,并将其转换为HTTP查询

JSON是这样的:

[
    {"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编码,对于这些参数名称或值中的任何一个都是必需的。