How to pass an array via $_GET in php?

后端 未结 4 1578
眼角桃花
眼角桃花 2020-11-29 03:35

How can I pass one or more variables of type array to another page via $_GET?

I always passed variable values in the form ?a=1&b=2&c=3

W

相关标签:
4条回答
  • 2020-11-29 03:46

    You can use the [] syntax to pass arrays through _GET:

    ?a[]=1&a[]=2&a[]=3
    

    PHP understands this syntax, so $_GET['a'] will be equal to array(1, 2, 3).

    You can also specify keys:

    ?a[42]=1&a[foo]=2&a[bar]=3
    

    Multidimentional arrays work too:

    ?a[42][b][c]=1&a[foo]=2
    

    http_build_query() does this automatically:

    http_build_query(array('a' => array(1, 2, 3))) // "a[]=1&a[]=2&a[]=3"
    
    http_build_query(array(
        'a' => array(
            'foo' => 'bar',
            'bar' => array(1, 2, 3),
         )
    )); // "a[foo]=bar&a[bar][]=1&a[bar][]=2&a[bar][]=3"
    

    An alternative would be to pass json encoded arrays:

    ?a=[1,2,3]
    

    And you can parse a with json_decode:

    $a = json_decode($_GET['a']); // array(1, 2, 3)
    

    And encode it again with json_encode:

    json_encode(array(1, 2, 3)); // "[1,2,3]"
    

    Dont ever use serialize() for this purpose. Serialize allows to serialize objects, and there is ways to make them execute code. So you should never deserialize untrusted strings.

    0 讨论(0)
  • 2020-11-29 03:54
    $city_names = array(
        'delhi',
        'mumbai',
        'kolkata',
        'chennai'
    );
    $city_query = http_build_query(array('city' => $city_names));
    

    this will give you:

    city[0]=delhi&city[1]=mumbai&city[2]=kolkata&city[3]=chennai
    

    if you want to encode the brackets also then use the below code:

    $city_query = urlencode(http_build_query(array('city' => $city_names)));
    

    Output:

    city%255B0%255D%3Ddelhi%26city%255B1%255D%3Dmumbai .....
    

    Reference: http_build_query, urlencode

    0 讨论(0)
  • 2020-11-29 04:03

    Just repeat your $_GET variables like this: name=john&name=lea

    This gives you an array.

    I used to believe it would be overwritten!

    0 讨论(0)
  • 2020-11-29 04:05

    You can pass an associative array to http_build_query() and append the resulting string as the query string to the URL. The array will automatically be parsed by PHP so $_GET on the receiving page will contain an array.

    Example

    $query_str = http_build_query(array(
        'a' => array(1, 2, 3)
    ));
    
    0 讨论(0)
提交回复
热议问题