Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I am trying to pass an array of values through a form submission. As an example:

example.com?value1=178&value2=345&value3=2356

The easy solution would be for me to do the following to get the values on the new page:

$value1=$_GET['value1'];
$value2=$_GET['value2'];
$value3=$_GET['value3'];

The difficulty that I am having is that the variable after the word 'value' passed through the form will change with each submission. So I have amended the code to pass as:

example.com?value14=178&variable=14&value23=345&variable=23&value63=2356&variable=63

As you can see here, I have now passed the variable that comes in from of the value as a GET parameter. My attempt then GET these values to display individually on the submitted page is as follows:

$variable=$_GET['variable'];    
$value=$_GET['value'.$variable];

echo $value . '<br>';

This code almost works. I am able to get the last array which is passed through to display. How can I fix this code to get all of the passed values to display on the submitted page?

share|improve this question

3 Answers 3

up vote 2 down vote accepted

Use PHP's array notation for form fields:

val[]=178&val[]=14&val[]=345&etc...

This will cause $_GET['val'] to be an array:

$_GET = array(
   'val' => array(178, 14, 345, etc...)
)

If you can't rearrange the URL like that, you can try using preg_grep:

$matches = preg_grep('/^variable\d+$/', array_keys($_GET));

which'll return :

$matches= array('variable1', 'variable2', 'variable3', etc...);
share|improve this answer

Use an array, for example like this without the need for variable $variable.

example.com?value[14]=178&value[23]=345&value[63]=2356

foreach ($_GET['value'] as $key => value) {
    echo $key . " => " . $value . "<br/>";
}

EDIT: Another way for getting the values would be looping the whole $_GET -array and parsing values from there like this (variables are always in the form of "value" followed by X numbers):

example.com?value14=178&value23=345&value63=2356

$values = array();
foreach ($_GET as $key => $value) {
    if (preg_match('/^value[\d]+$/', $key)) {
        // remove "value" from the beginning of the key
        $key = str_replace('value', '', $key);
        // save result to array
        $values[$key] = $value;
    }
}
share|improve this answer

See http_build_query()

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.