我正在一个项目中,我将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)
的内容,但都无法正常工作。
感谢您的帮助!
答案 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?