Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 将数组作为url参数传递_Php_Arrays_Url - Fatal编程技术网

Php 将数组作为url参数传递

Php 将数组作为url参数传递,php,arrays,url,Php,Arrays,Url,我可以将数组作为url参数传递的最佳方式是什么?我在想这是否可能: $aValues = array(); $url = 'http://www.example.com?aParam='.$aValues; 或者这个怎么样: $url = 'http://www.example.com?aParam[]='.$aValues; 我读过一些例子,但我觉得很混乱: $url = 'http://www.example.com?aParam[]=value1&aParam[]=value

我可以将数组作为url参数传递的最佳方式是什么?我在想这是否可能:

$aValues = array();

$url = 'http://www.example.com?aParam='.$aValues;
或者这个怎么样:

$url = 'http://www.example.com?aParam[]='.$aValues;
我读过一些例子,但我觉得很混乱:

$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';

请在输出()时转义变量

你不能只打印一个数组,你必须以某种方式使用一个循环来构建你的url

$url = 'http://example.com/index.php?'
$first = true;
foreach($aValues as $key => $value) {
  if(!$first) $url .= '&amp';
  else $first = false;
  $url .= 'aValues['.urlencode($key).']='.urlencode($value);
}

最简单的方法是使用
序列化
函数

它序列化任何用于存储或传输的变量。你可以在报纸上读到

使用
取消序列化

因此,在传递到您使用的URL时:

$url=urlencode(序列化($array))

并还原您使用的变量

$var=unserialize(urldecode($\u GET['array']))

不过在这里要小心。GET请求的最大大小限制为4k,通过在URL中传递数组,可以轻松地超过4k


而且,这并不是传递数据的最安全的方式!您可能应该转而考虑使用会话。

编辑:不要错过上面Stefan的解决方案,它使用了非常方便的功能:

奈特关于逃跑的事说得对。但是,有一种更简单的方法:

$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));
如果要使用关联数组执行此操作,请尝试以下操作:

PHP 5.3+(lambda函数)


PHP有一个非常简单的解决方案:。它将查询参数作为关联数组:

$data = array(
    1,
    4,
    'a' => 'b',
    'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));
会回来的

string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"
http\u build\u query()
为您处理所有必要的转义(
%5B
=>
[
%5D
=>
]
),因此此字符串等于
aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d

 <?php
$array["a"] = "Thusitha";
$array["b"] = "Sumanadasa";
$array["c"] = "Lakmal";
$array["d"] = "Nanayakkara";

$str = serialize($array);
$strenc = urlencode($str);
print $str . "\n";
print $strenc . "\n";
?> 
因此,如果您想通过URL将此
$array
传递到
page\u no_2.php

例如:

要返回到原始数组,它需要是
urldecode()
,然后是
unserialize()
,如第2.php页所示:

    <?php
    $strenc2= $_GET['data'];
    $arr = unserialize(urldecode($strenc2));
    var_dump($arr);
    ?>

再次:D

我使用序列化的base64编码数据来执行此操作。我想这是最好和最小的方法。urlencode浪费了很多空间,而您只有4k

  • 原因:
  • 如何:

这不是一个直接的答案,因为这个问题已经得到了回答,但每个人都在谈论发送数据,但没有人真正说出数据到达时你在做什么,我花了整整半个小时才解决。所以我想我会在这里帮忙

我将重复这一点

$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);
显然,你会把它格式化得比这个好 www.someurl.com?x=$query

为了找回数据

parse_str($_GET['x']);
echo $mydata['dog'];
echo $mydata['cat'];
**在创建url页面中**
$data=数组(
“汽车”=>“铃木”,
“型号”=>“1976”
);
$query=http\u build\u查询(数组('myArray'=>$data));
$url=urlencode($query);
回声“

”; **在收到的页面中** parse_str($_GET['data']); echo$myArray['car']; 回声“
”; echo$myArray['model'];
在收到的页面中,您可以使用:

parse_str($str,$array);
变量转储($数组)

您可以将urlencodedjson\u encode

例如:

<?php

$cars = array
(
    [0] => array
        (
            [color] => "red",
            [name] => "mustang",
            [years] => 1969
        ),

    [1] => array
        (
            [color] => "gray",
            [name] => "audi TT",
            [years] => 1998
        )

)

echo "<img src='your_api_url.php?cars=" . urlencode(json_encode($cars)) . "'/>"

?>



祝你好运!为什么你不能把
$\u POST
传进来?这看起来真的很乱。但要实现这一目标,必须做到这一点。另一种稍微复杂的方法是分配
query=array('aParam'=>json_encode($arrayOfValues))
。您可以使用
url\u encode(内爆('/',$query))
传入更好的url。Url看起来像
www.example.com/aParam/[va1,val2,…]
。接收时,您必须将aParam值解码为数组。序列化也是一种很好的方法,但它的可读性也不太好。是的,当您处理URL时,序列化并不是一种干净的方法,因为它会扩展数据太多。最好是自定义。GET参数的最大大小是我所担心的,这就是为什么我(愚蠢地)希望解析器不会介意传递的是数组。我刚刚意识到,如果不触及最大尺寸,它将无法工作。无论如何,谢谢你,纳什,我想我会用sessions来做。你真的不应该把不可信的数据传递给unserialize()。尝试使用json_encode()和json_decode()代替。不要使用“first”变量跳过第一个&;,您可以使用临时数组来存储值,并使用内爆后缀。只是为了可读性。整洁的如果它也能与关联数组一起使用,那就太好了+1 anywayknittl:我们可以使用回调函数来数组_map并分别传递键和值。检查它。但是这仍然可能超过GET参数的最大大小,对吗?如果我像下面提到的纳什那样使用会话,几率有多大?好吧,您可以在会话中或多或少地存储无限量的数据。会话的风险在于,当会话过期时,或者如果用户试图同时在两个选项卡中执行操作,URL就会中断。如果用户将页面添加到书签中,然后在会话到期后返回,那么他们是否仍能获得预期的页面?听起来您可能需要更仔细地思考您的体系结构,以及为什么首先要传递如此巨大的阵列。+1回答不错,并且在发布此答案一年后也为我工作。如果您想知道如何将其恢复到阵列中,答案是,我用它把url放到数组中,但不知道如何取回数据。我尝试了parse_str,但无法使其工作。我认为这对于任何遇到
http\u build\u query
返回
param[]
和somtimes
param[index]
问题的人来说都是很有价值的信息。查看这篇文章:要获取值,只需$data=$\u get['aParam']@dfortun get back很重要您节省了很多时间parse_str()对我不起作用,但$data=$u get['aParam'];是正确的解决方案欢迎使用堆栈溢出。当给一个十年的问题加上八个其他答案时,这是非常重要的
    <?php
    $strenc2= $_GET['data'];
    $arr = unserialize(urldecode($strenc2));
    var_dump($arr);
    ?>
 array(4) {
  ["a"]=>
  string(8) "Thusitha"
  ["b"]=>
  string(10) "Sumanadasa"
  ["c"]=>
  string(6) "Lakmal"
  ["d"]=>
  string(11) "Nanayakkara"
}
$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);
parse_str($_GET['x']);
echo $mydata['dog'];
echo $mydata['cat'];
**in create url page**

$data = array(
        'car' => 'Suzuki',
        'Model' => '1976'
        );
$query = http_build_query(array('myArray' => $data));
$url=urlencode($query); 

echo" <p><a href=\"index2.php?data=".$url."\"> Send </a><br /> </p>";

**in received page**

parse_str($_GET['data']);
echo $myArray['car'];
echo '<br/>';
echo $myArray['model'];
<?php

$cars = array
(
    [0] => array
        (
            [color] => "red",
            [name] => "mustang",
            [years] => 1969
        ),

    [1] => array
        (
            [color] => "gray",
            [name] => "audi TT",
            [years] => 1998
        )

)

echo "<img src='your_api_url.php?cars=" . urlencode(json_encode($cars)) . "'/>"

?>