开发者

PHP $_GET should return array instead of string

开发者 https://www.devze.com 2023-01-19 12:19 出处:网络
I have a strange error with a $开发者_JAVA百科_GET Value. I\'m using this code for a query: array($_GET[\'cats\'])

I have a strange error with a $开发者_JAVA百科_GET Value. I'm using this code for a query: array($_GET['cats'])

If I insert the get parameter manually, like: array(3,328) everything works fine. But if I use: array($_GET['cats']) and submit the cats by URL like ?cats=3,328 it does not work. What could be the issue?


You can't plug a value like that. array($_GET['cats']) is equivalent to array('3,328'), if the value of $_GET['cats'] is 3,328. So basically, the value is a string, not a list of integers. What you want is:

explode(',', $_GET['cats'])


array($_GET['cats']) will create an array containing the single element that’s value is the value of $_GET['cats'], no matter what value it is. In case of the string value 3,328 is would be identical to array('3,328').

If you want to turn the string value 3,328 into an array identical to array(3,328), use explode to split the string at , into strings and array_map with intval to turn each string into an integer:

$arr = array_map('intval', explode(',', $_GET['cats']));

Now this resulting array is really identical to array(3,328):

var_dump($arr === array(3,328));  // bool(true)


As others have said, $_GET['cats'] is a string as you're doing things at the moment.

However, if you change your URI querystring to ?cats[]=3,328 then $_GET['cats'] will be the array(3,328) ready for you to use.


Solution 1: Send HTTP GET parameters as an array in your URL

URL: parameters ?cats[]=3&cats[]=328

var_dump($_GET["cats"]) will result in:

array(2) {
  [0]=>
  string(1) "3"
  [1]=>
  string(3) "328"
}

Solution 2: Send numbers as one string in URL and process it with PHP

URL parameters: ?cats=3,328

... and then process it with some PHP code:

$cats = array_map("intval", explode(",", $_GET["cats"]));

var_dump($_GET["cats"]) will result in:

array(2) {
  [0]=>
  string(1) "3"
  [1]=>
  string(3) "328"
}


$_GET['cats'] is a simple string. If you want to get 3 and 328 as seperate values you need to use explode. You can than use foreach to print your exploded values.


You need to split up the GET-Parameters

$values = explode(',', $_GET['cats'])
0

精彩评论

暂无评论...
验证码 换一张
取 消