如何检查常量数组项是否存在

时间:2018-10-22 21:52:47

标签: php const

我正在一个项目中,我将URI列表分配给一个常量数组。

$vars = explode("/", $_SERVER['REQUEST_URI']);
array_shift($vars);
if(end($vars) == "" && count($vars) > 0){ //remove last element when empty (occures when using / at the end of URL)
    array_pop($vars);
}
define("URI_VARS", $vars);
unset($vars);

最大的问题是,如何检查项目是否存在?如果使用defined("URI_VARS")当然可以,但是如何检查URI_VARS[1]是否存在?

defined("URI_VARS[1]")似乎无效。我在网上找到了有关defined("URI_VARS", "1")defined("URI_VARS" , 1)的内容,但都无法正常工作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

defined()仅接受一个参数,因此defined("URI_VARS" , 1)无效。您会收到一条警告,它将返回null而不是true或false。您只需要添加第二项检查,以在检查常量定义后验证密钥是否存在。

$check = defined("URI_VARS") && array_key_exists(1, URI_VARS);

如果第一部分返回false,则不会评估第二部分(array_key_exists(1, URI_VARS)),因此您不必担心未定义的常量警告。

答案 1 :(得分:0)

正如@ Do n't Panic所述,您可以使用array_key_exists来检查您要查找的密钥是否存在。如果您不知道特定的密钥,或者只是想查看是否有一定数量的URI段,可以使用count http://php.net/manual/en/function.count.php

if (defined('URI_VARS') && count(URI_VARS) >= 2) {
   // do something
}

此外,请注意将常量声明为数组,因为行为会随着时间而改变。 PHP Constants Containing Arrays?