如何消除PHP代码中的重复?

如何消除PHP代码中的重复?,php,Php,是否有一种方法可以检查所有这些值,而不必对所有这些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语句进行编码,然后获取最后一个值,例如在本代码示例中
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'];
}

您可以使用
for
循环检查参数:

for ($i=1; $i<10; ++$i) {
    if (isset($_GET['sub'.$i])) {
        ${'sub'.$i} = $_GET['sub'.$i];
    }
}

您可以使用
for
循环检查参数:

for ($i=1; $i<10; ++$i) {
    if (isset($_GET['sub'.$i])) {
        ${'sub'.$i} = $_GET['sub'.$i];
    }
}

更优雅的解决方案是使用数组和foreach语句。

更优雅的解决方案是使用数组和foreach语句。

/foo.php?sub=1,2,3,4,5

$subs = explode(',', $_GET['sub']);
然后您可以从
$subs[count($subs)-1]
数组\u pop($subs)
或您喜欢的其他方式获取最后一个值。

/foo.php?sub=1,2,3,4,5

$subs = explode(',', $_GET['sub']);

然后,您可以从
$subs[count($subs)-1]
数组\u pop($subs)
或您喜欢的其他方式获取最后一个值。

强制变量版本:

$keys = preg_grep('/^sub\d+$/', array_keys($_GET));

foreach ($keys as $key) {
  $$key = $_GET[$key];
}

好的一面是:不需要循环到PHP_MAX_INT,因为它只对真正存在的东西起作用。下边。。。变量。

强制性变量版本:

$keys = preg_grep('/^sub\d+$/', array_keys($_GET));

foreach ($keys as $key) {
  $$key = $_GET[$key];
}

好的一面是:不需要循环到PHP_MAX_INT,因为它只对真正存在的东西起作用。下边。。。变量。

这里有一个更合理的解决方案:

演示:

网址:

代码:


这里有一个更合理的解决方案:

演示:

网址:

代码:


最简单的方法是使用
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[]" />
sub1
次级2
子3
子4
子5
PHP将把所有这些组合成一个数组

然后,要得到最后一个,它应该是
$\u get['sub'][-1]


编辑:这与NullUserException所做的基本相同,但他直接在url中而不是在表单中进行编辑。

最简单的方法是使用
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[]" />
sub1
次级2
子3
子4
子5
PHP将把所有这些组合成一个数组

然后,要得到最后一个,它应该是
$\u get['sub'][-1]


编辑:这与NullUserException所做的基本相同,但他是直接在url中而不是在表单中执行的。

我试图用
提取
找到一个解决方案,但它变得非常复杂:

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
,将数组转过来(使变量名现在位于数组的键中),然后与
$\u GET
数组相交。因此,只有sub1..10被提取出来。

我试图用
提取出一个解决方案,但它变得非常复杂:

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
,将数组转过来(使变量名现在位于数组的键中),然后与
$\u GET
数组相交。因此,只提取sub1..10。

正如dmags所说,我更喜欢使用数组(我经常使用它)。如果您有不同的变量名(如名称、地址、城市、国家、邮政编码等),它会更优雅(IMHO),也会起作用


正如dmags所说,我更喜欢使用数组(我经常使用它)。如果您有不同的变量名(如名称、地址、城市、国家、邮政编码等),它会更优雅(IMHO),也会起作用


我会将变量赋值改为
$sub=$\u GET[…]
;我认为OP想要得到最后一个。如果任何
'subX'
不可用,该循环将停止…这似乎与上面的代码行为不同。这肯定是疯了。在我的系统中,PHP_INT_MAX是9223372036854775807,我会将该变量赋值更改为
$sub=$\u GET[…]
;我认为OP想要得到最后一个。如果任何
'subX'
不可用,该循环将停止…这似乎与上面的代码行为不同。这肯定是疯了。在我的系统上,PHP_INT_MAX是9223372036854775807。或者,你可以做一些类似于
/foo.PHP?sub[]=1&sub[]=2&sub[]=3&sub[]=4&sub[]=5
,尽管它有点冗长,只为你保存一个PHP命令。或者,你可以做一些类似于
/foo.PHP?sub[]=1&sub[]=2&sub[]=3&sub[]=4&sub[]=5
,虽然它有点冗长,只为您保存了一个php命令。Duplicate of、.Duplicate of、。