如何检查variables是否是数组?

我想用一个variables的foreach循环,但这个variables可以是许多不同的types,例如NULL

所以在foreach之前我testing一下:

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

但是我意识到它也可以是一个实现Iterator接口的类。 也许我是盲目的,但如何检查类是否实现接口? 有没有像is_a函数或inherits运算符? 我发现class_implements ,我可以使用它,但也许有一些更简单的?

其次,更重要的是,我想这个函数存在,足以检查variablesis_array或“实现Iterator接口”还是应该testing更多的东西?

如果你在一个函数内部使用foreach ,并且期望一个数组或者一个Traversable对象,你可以用下面的方法input提示函数:

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

如果你没有在函数内部使用foreach或者你期望两者都可以简单地使用这个构造来检查你是否可以迭代variables:

 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编程中,每当一个variables是

  • 数组
  • 一个东西

不是

  • 空值
  • 资源
  • 一个标量

你可以使用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)