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