如何检查变量是否是数组?

我想用一个带有变量的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

    下一篇: Explain foreach loop in php