如何检查变量是否是数组?
我想用一个带有变量的foreach
循环,但是这个变量可以有很多不同的类型,例如NULL
。
因此,在foreach
之前我测试它:
if(is_array($var)){
foreach($var as ...
但是我意识到它也可以是一个实现Iterator
接口的类。 也许我是盲目的,但如何检查类是否实现接口? 有没有像is_a
函数或inherits
运算符? 我发现class_implements
,我可以使用它,但也许有一些更简单?
第二,更重要的是,我想这个函数存在,足以检查变量is_array
或“实现Iterator
接口”还是应该测试更多的东西?
如果你在一个函数内部使用foreach
并且你期望一个数组或者一个Traversable对象,你可以用下面的方法键入提示函数:
function myFunction(array $a)
function myFunction(Traversable)
如果你没有在函数内部使用foreach
或者你期望两者都可以简单地使用这个构造来检查你是否可以迭代变量:
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编程中,只要一个变量是
并不是
你可以使用foreach
。
你可以用一个简单的函数来检查Traversable
实例。 这将适用于Iterator
所有这些,因为Iterator extends Traversable
function canLoop($mixed) {
return is_array($mixed) || $mixed instanceof Traversable ? true : false;
}
链接地址: http://www.djcxy.com/p/53037.html
上一篇: How to check if variable is array?... or something array