Как проверить, является ли переменная массивом?... или что-то вроде массива
Я хочу использовать 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на нем.