Как проверить, существует ли ключ массива в определенном константном массиве [PHP 7 define ()]

В PHP7 появилась возможность определять константы массива с помощью define (). В PHP 5.6 они могут быть определены только с помощью const.

Так что я могу использовать define( string $name , mixed $value )) задать массив констант, но кажется, что забыли также привести апгрейд defined ( mixed $name ) вместе с тем, что он по-прежнему только принимает string ценность или я что-то упустил?

PHP v: < 7 Я должен был определить каждое животное отдельно define('ANIMAL_DOG', 'black');, define('ANIMAL_CAT', 'white'); и т. д. или сериализовать мой зоопарк.

PHP v: >= 7 Я могу определить всю зоопарк это чертовски круто, но я не могу найти свое животное в зоопарк просто я могу найти одного ЖИВОТНОГО. Это разумно в реальном мире, но вот дополнительный вопрос, если я не пропустил что-то.

Это намеренно, что определено (); не принимает массив? Если я определю свой зоопарк …

define('ANIMALS', array(
'dog' => 'black',
'cat' => 'white',
'bird' => 'brown'
));

… почему я не могу просто найти свою собаку defined('ANIMALS' => 'dog');?

1. Печатает всегда: The dog was not found

print (defined('ANIMALS[dog]')) ? "1. Go for a walk with the dog\n" : "1. The dog was not found\n";

2. Печатает всегда: The dog was not found и когда собака действительно не существует, показывает Уведомление + Предупреждение

/** if ANIMALS is not defined
* Notice:  Use of undefined constant ANIMALS - assumed ANIMALS...
* Warning:  Illegal string offset 'dog'
* if ANIMALS['dog'] is defined we do not get no warings notices
* but we still receive The dog was not found */
print (defined(ANIMALS['dog'])) ? "2. Go for a walk with the dog\n" : "2. The dog was not found\n";

3. независимо от того, ANIMALS, ANIMALS['dog'] определено или нет, я получаю предупреждение:

/* Warning:  defined() expects parameter 1 to be string, array given...*/
print defined(array('ANIMALS' => 'dog')) ? "3. Go for a walk with the dog\n" : "3. The dog was not found\n";

4. Я получаю уведомление, если ANIMALS['dog'] не определено

/* Notice: Use of undefined constant ANIMALS - assumed 'ANIMALS' */
print (isset(ANIMALS['dog'])) ? "4. Go for a walk with the dog\n" : "4. The dog was not found\n";

5. Так я прав, что тогда остался только один вариант?

print (defined('ANIMALS') && isset(ANIMALS['dog'])) ? "Go for a walk with the dog\n" : "The dog was not found\n";

3

Решение

PHP 7 позволяет вам define постоянный массив, но то, что определяется как константа в этом случае сам массив, не отдельные его элементы. В любом другом случае рассматривайте константные функции как типичный массив, поэтому вам нужно использовать обычные методы для проверки существования определенного ключа внутри него.

Попробуй это:

define('ANIMALS', array(
'dog'  => 'black',
'cat'  => 'white',
'bird' => 'brown'
));

print (defined('ANIMALS') && array_key_exists('dog', ANIMALS)) ?
"Go for a walk with the dog\n" : "The dog was not found\n";
9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]