如何检查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)