Как проверить, существует ли постоянный элемент массива - PullRequest
0 голосов
/ 23 октября 2018

Я работаю над проектом, в котором я назначаю свой список 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 голосов
/ 23 октября 2018

Как уже упоминалось @ Don'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-константы, содержащие массивы?

0 голосов
/ 23 октября 2018

defined() принимает только один аргумент, поэтому defined("URI_VARS" , 1) не является допустимым вызовом.Вы получите предупреждение, и оно вернет ноль, а не истину или ложь.Вам просто нужно добавить вторую проверку, чтобы убедиться, что ключ существует после проверки, что константа определена.

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

Вторая часть (array_key_exists(1, URI_VARS)) не будет оценена, если первая часть вернет falseтак что вам не нужно беспокоиться о неопределенных постоянных предупреждениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...