Как проверить, является ли переменная массивом?... или что-то вроде массива
Я хочу использовать foreach
цикл с переменной, эта переменная может быть много различных типов, NULL
например.
Итак, перед foreach
Я проверяю его:
if(is_array($var)){
foreach($var as ...
но я понял, что это может быть класс, реализующий Iterator
интерфейс. Может быть, я слепой, но как проверить, реализует ли класс интерфейс? Есть ли что-то вроде is_a
функция или inherits
оператор? Я нашел class_implements
, Я могу использовать его, но, может быть, есть что-то проще?
и во-вторых, что более важно, я полагаю, что эта функция существует, было бы достаточно, чтобы проверить, если переменная is_array
или "реализует Iterator
интерфейс" или я должен проверить что-то еще?
4 ответа:
если вы используете
foreach
внутри функции и вы ожидаете массив или проходимым
foreach
может обрабатывать массивы и объекты. Вы можете проверить это с:$can_foreach = is_array($var) || is_object($var); if ($can_foreach) { foreach ($var as ... }
вам не нужно специально проверять
Traversable
как намекали другие в своих ответах, потому что все объекты - как и все массивы - могут быть пройдены в PHP.более технически:
foreach
работает со всеми видами траверсаблей, т. е. с массивами, с простыми объектами (где доступные свойства проходят) иTraversable
объекты (точнее объекты, определяющие внутреннееget_iterator
обработчик).(источник)
просто сказал В общем программировании PHP, когда переменная
- массив
- объект
и не
- NULL
- ресурс
- a скаляр
можно использовать
foreach
на нем.