Как проверить, является ли переменная массивом? … или что-то вроде массива

Я хочу использовать цикл foreach с переменной, но эта переменная может быть много разных типов, например NULL .

Поэтому перед тем, как foreach я тестирую это:

 if(is_array($var)){ foreach($var as ... 

Но я понял, что это также может быть класс, который реализует интерфейс Iterator . Может быть, я слепой, но как проверить, реализует ли класс интерфейс? Есть что-то вроде функции is_a или inherits оператор? Я нашел class_implements , я могу использовать его, но, может быть, есть что-то более простое?

И, во-вторых, что более важно, я полагаю, что эта функция существует, было бы достаточно, чтобы проверить, является ли переменная is_array или «реализует интерфейс Iterator » или мне нужно проверить что-то еще?

Solutions Collecting From Web of "Как проверить, является ли переменная массивом? … или что-то вроде массива"

Если вы используете foreach внутри функции, и вы ожидаете массив или объект Traversable, вы можете ввести подсказку о том, что функция:

 function myFunction(array $a) function myFunction(Traversable) 

Если вы не используете foreach внутри функции или вы ожидаете, что вы можете просто использовать эту конструкцию, чтобы проверить, можете ли вы перебирать переменную:

 if (is_array($a) or ($a instanceof Traversable)) 

foreach может обрабатывать массивы и объекты. Вы можете проверить это с помощью:

 $can_foreach = is_array($var) || is_object($var); if ($can_foreach) { foreach ($var as ... } 

Вам не нужно специально проверять на Traversable как другие намекали на это в своих ответах, потому что все объекты – как и все массивы – проходят через PHP.

Более технически:

foreach работает со всеми видами трассировок, т. е. с массивами, с обычными объектами (где доступны доступные свойства) и объектами Traversable (или, скорее, объектами, которые определяют внутренний обработчик get_iterator ).

( источник )

Проще говоря, в общем программировании PHP, всякий раз, когда переменная

  • массив
  • объект

и не

  • НОЛЬ
  • ресурс
  • скаляр

вы можете использовать foreach на нем.

Вы можете проверить экземпляр Traversable с помощью простой функции. Это будет работать для всего этого Iterator потому что Iterator extends Traversable

 function canLoop($mixed) { return is_array($mixed) || $mixed instanceof Traversable ? true : false; } 
 <?php $var = new ArrayIterator(); var_dump(is_array($var), ($var instanceof ArrayIterator)); 

возвращает bool (false) bool (true)