动态$ _GET [$ value] - 任何想法?

时间:2015-04-28 09:54:46

标签: php

有没有人为此做过工作?

我有一个针对L0,L1,L2等的htaccess规则...作为页面ID' s (index.php?L0 = example& L1 = page1并重命名为example / page1.html) 我想添加额外的get vars example / page1.html?filter = event

我以为我能做到这一点

$i=0;
foreach ($_GET['L'.$i] as $key => $value) {
$pages[] = $value;  
$i++;  
}
$page_id = end($pages);

这不起作用。

这会将页面放入自己的数组中,然后我可以单独定位其他变量。

目前我得到了我想要使用的页面'结束($ _ GET)'但如果我添加额外的获取变量,则会发生冲突。

4 个答案:

答案 0 :(得分:1)

您需要将整个GET数据放入数组中,然后才能轻松处理。这将使您更好地理解该问题,您可能不得不改变获取L0,L1的策略,因为它们不是GET数据。

答案 1 :(得分:1)

第1部分 - 以错误的格式开头。

如果要使用foreach结构,则需要确保传递给它的值是一个数组。目前,您正在将非数组值传递给foreach,因此它永远不会被触发。

您应该重新构建$_GET值,以便使用(手动)数字指示符而不是使用数组指示符 -

$_GET['L0'], 
$_GET['L1'] 

变为

$_GET['L'][...]

因此,您的网址将为file.php?L[]=value1&L[]=value2等。然后,PHP可以将这些非常整齐地处理为foreach循环。

请参阅How to get PHP $_GET array?

第2部分 - 获得您想要的价值

此上述值将/可以处理为:

foreach ($_GET['L'] as $value) {
$pages[] = $value;  
}
$page_id = end($pages);

这意味着无需担心"计数"因为它全部是自动的和自包含的。它也会(可能)使.htaccess值分配更容易,因为$ _GET数组名称将始终相同(在本例中为L[]=)。

但为了获得正确的值,您需要为其指定一个标识符 - 或 ,请说您正在寻找{{1} } value - 你要做的是手动检查"键"是你正在寻找的那个,所以你没有使用相同的filter定义GET数组,但是例如再次使用你的foreach循环,这次定义了密钥是什么:

所以给定了URL查询:

L<number>

然后page.php?L[]=var1&L[filter]=var2&L[]=var3 将被重写为:

foreach

然后定义foreach ($_GET['L'] as $key => $value) { if ($key == "filter"){ $pages[$key] = $value; } else { $pages[] = $value; } } $page_id = $pages['filter']; 值,如果它存在的话。这意味着在此过程之后,PHP中过滤器的值为filter - 如果存在则明确定义。

答案 2 :(得分:0)

这个怎么样?

$i = 0;
while (isset($_GET['L' . $i])) {
    $key = 'L' . $i;
    $value = $_GET[$key];
    $pages[] = $value;
    $i++;
}

您的代码仅遍历$_GET['L0'],如果不是数组,则会失败。因此,您可以迭代$_GET并仅使用以 L 开头的那些键,或者按我建议的方式获取这些值。

答案 3 :(得分:-1)

谢谢大家,我实际上是在等待回应的时候想出来的,无论是正确的方式。但它确实有效。

$i=0;
foreach ($_GET as $key => $value) {
   if($key=='L'.$i){
     $pages[] = $value;
   }  
$i++;  
}
$page_id = end($pages);