有没有办法可以检查所有这些值,而无需编写所有这些if语句,然后在此代码示例sub10
中获取最后一个值
我怎么能用PHP做到这一点?
这是PHP代码。
if(isset($_GET['sub1'])) {
$sub1 = $_GET['sub1'];
}
if(isset($_GET['sub2'])) {
$sub2 = $_GET['sub2'];
}
if(isset($_GET['sub3'])) {
$sub3 = $_GET['sub3'];
}
if(isset($_GET['sub4'])) {
$sub4 = $_GET['sub4'];
}
if(isset($_GET['sub5'])) {
$sub5 = $_GET['sub5'];
}
if(isset($_GET['sub6'])) {
$sub6 = $_GET['sub6'];
}
if(isset($_GET['sub7'])) {
$sub7 = $_GET['sub7'];
}
if(isset($_GET['sub8'])) {
$sub8 = $_GET['sub8'];
}
if(isset($_GET['sub9'])) {
$sub9 = $_GET['sub9'];
}
if(isset($_GET['sub10'])) {
$sub10 = $_GET['sub10'];
}
答案 0 :(得分:4)
您可以使用检查参数的for
循环:
for ($i=1; $i<10; ++$i) {
if (isset($_GET['sub'.$i])) {
${'sub'.$i} = $_GET['sub'.$i];
}
}
语法${'sub'.$i}
是variable variable syntax,用于引用由表达式'sub'.$i
的值标识的变量。
如果您只想要最后一个 subX 参数,请按相反的顺序测试参数:
$sub = null;
for ($i=10; $i>=1; --$i) {
if (isset($_GET['sub'.$i])) {
$sub = $_GET['sub'.$i];
break;
}
}
答案 1 :(得分:3)
最简单的方法是使用sub[]
元素制作表单,如下所示:
Sub 1 <input type="text" name="sub[]" />
Sub 2 <input type="text" name="sub[]" />
Sub 3 <input type="text" name="sub[]" />
Sub 4 <input type="text" name="sub[]" />
Sub 5 <input type="text" name="sub[]" />
PHP会将所有这些组合成一个数组。
然后,要获得最后一个,它将是$_GET['sub'][-1]
。
编辑:这与NullUserException的作用基本相同,但他直接在网址而不是表单中进行。
答案 2 :(得分:1)
更优雅的解决方案是使用数组和foreach语句。
答案 3 :(得分:1)
/foo.php?sub=1,2,3,4,5
$subs = explode(',', $_GET['sub']);
然后,您可以从$subs[count($subs)-1]
或array_pop($subs)
获取最后一个值,或者您想要的其他值。
答案 4 :(得分:1)
强制变量版本:
$keys = preg_grep('/^sub\d+$/', array_keys($_GET));
foreach ($keys as $key) {
$$key = $_GET[$key];
}
从好的方面来说:不需要循环到PHP_MAX_INT,因为它只适用于真正存在的东西。向下......变量变量。
答案 5 :(得分:1)
这是一个更明智的解决方案:
代码:
print_r($_GET['sub']);
$sub = end($_GET['sub']);
echo $sub;
答案 6 :(得分:0)
我试图用extract
提出一个解决方案,但它变得非常复杂:
extract(array_intersect_key($_GET, array_flip(array_map(function ($i) { return 'sub' . $i; }, range(1, 10)))));
有没有办法做到这一点?
这是格式化版本:
extract(
array_intersect_key(
$_GET,
array_flip(
array_map(
function ($i) {
return 'sub' . $i;
},
range(1, 10)
)
)
)
);
它的作用:创建一个数字从1到10的数组,用sub
作为前缀,然后转动数组(所以变量名现在在数组的键中),然后与数组相交$_GET
数组。因此,只提取sub1..10。
答案 7 :(得分:0)
正如dmags所说,我更喜欢使用数组(我经常使用它)。它更优雅(恕我直言),如果您有不同的变量名称(即姓名,地址,城市,国家,邮编等......),也可以使用它。
$vars= array('sub1','sub2','sub3','sub4','sub5','sub6','sub7','sub8','sub9','sub10');
foreach ($vars as $getvar)
if (isset($_GET[$getvar])) {
$$getvar= $_GET[$getvar];
}
}