使用第一个变量isset()

时间:2019-05-16 20:37:00

标签: php arrays get

我想将数组中的位置设置为等于存在的第一个$_GET参数。

这是我当前拥有的代码,由于使用数组,它无法完全按照我的意愿运行:

'searchOptions'=>array_merge(
                isset($_GET['Search1']['searchoption']) ? $_GET['Search1']['searchoption'] : array(),
                isset($_GET['Search2']['searchoption']) ? $_GET['Search2']['searchoption'] : array(),
                isset($_GET['Search3']['searchoption']) ? $_GET['Search3']['searchoption'] : array(),
                isset($_GET['Search4']['searchoption']) ? $_GET['Search4']['searchoption'] : array(),
                isset($_GET['searchBar']['searchoption']) ? $_GET['searchBar']['searchoption'] : array(),
                isset($_GET['searchOptions']) ? $_GET['searchOptions'] : array()
            ),

是否有更好的方法可以避免array_merge并正常工作?目前,如果在$_GET参数中传递字符串,则该字符串不起作用,因为它必须是数组。

此方法的工作方式是一次只检查$_GET个变量中的一个,因此一旦设置了一个变量,其余所有变量都不相关。

是否有一种方法可以做与我现有的方法类似的事情,而又不会像合并数组那样对待它?

这可以分为许多if语句,它们先检查然后设置是否存在,但是看起来很笨拙。

1 个答案:

答案 0 :(得分:3)

在PHP> = 7.0中,您可以使用Null coalescing operator并将它们链接起来:

$options =  $_GET['Search1']['searchoption']   ??
            $_GET['Search2']['searchoption']   ??
            $_GET['Search3']['searchoption']   ??
            $_GET['Search4']['searchoption']   ??
            $_GET['searchBar']['searchoption'] ??
            $_GET['searchOptions']             ?? [];

如果未设置任何内容,则$options是一个空数组[],如果这不是您想要的,只需替换它即可。