有没有人为此做过工作?
我有一个针对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)'但如果我添加额外的获取变量,则会发生冲突。
答案 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);