如何在URL中获取未知$ _GET值的数组?

时间:2011-12-07 14:56:45

标签: php

我使用在线购物车购买订购商品并通过网址将其唯一ID传递给process.php页面。所以URL看起来像

process.php?code_1=231&code_2=532&code_3=342

为订购的每件商品生成另一个code_x=xxx。在process.php页面上,如何在不知道订购了多少项的情况下创建数组来获取code_x的值?

4 个答案:

答案 0 :(得分:8)

通过将表单中元素的名称更改为code[],可以更好地解决此问题。

例如,你现在让我们说

<input type="text" name="code_1" ... />
<input type="text" name="code_2" ... />
<input type="text" name="code_3" ... />

您可以将其更改为

<input type="text" name="code[]" ... />
<input type="text" name="code[]" ... />
<input type="text" name="code[]" ... />

执行此操作后,$_GET['code']将是一个数组,其中包含文本框中的所有值作为其项目。

<强>更新

如果无法控制传入参数的名称,则需要手动解析。我就是这样做的:

// Sample data
$get = array('code_1' => 'foo', 'code_2' => 'bar', 'code_X' => 'X', 'asdf' => 'X');
$codes = array();

foreach($get as $k => $v) {
    // Reject items not starting with prefix
    if (substr($k, 0, 5) != 'code_') {
        continue;
    }

    // Reject items like code_X where X is not all digits
    $k = substr($k, 5);
    if (!ctype_digit($k)) {
        continue;
    }

    $codes[$k] = $v;
}

print_r($codes);

答案 1 :(得分:4)

使用像Jon suggested这样的数组会好得多。

为此不使用get也会更清晰。而是post

但是如果你真的想走这条路,你可以这样做:

foreach($_GET as $name=>$value) {
    if (strpos($name, 'code_') !== 0) continue;

    // here are the names and values of the items
}

然而再次:我不推荐它。

答案 2 :(得分:1)

print_r($_GET);

foreach($_GET as $key=>$val)
{
    echo '<br />';
    echo $key.' : '.$val;

}

答案 3 :(得分:1)

你必须遍历$ _GET并寻找名字。

foreach(!empty($_GET as $name=>$value)) {
    // Check for match names for your 
    if (preg_match('/^code_[1-9]$/', $name)) {
      // Do whatever with values
    }
}