当前位置: 首页 > 面试题库 >

可迭代对象和数组类型提示?

端木兴国
2023-03-14
问题内容

我有很多函数,它们具有对数组的类型提示或用于is_array()检查变量的数组性质。

现在,我开始使用可迭代的对象。他们实施IteratorIteratorAggregate。如果它们通过类型提示或接受,则将它们接受为数组is_array()吗?

如果必须修改代码,是否有通用的is_iterable(),或者我必须做类似的事情:

if ( is_array($var) OR $var instance_of Iterable OR $var instanceof IteratorAggregate ) { ... }

还有哪些其他可迭代的接口?


问题答案:

我认为您的意思是instanceof
Iterator,PHP没有Iterable接口。它确实有一个Traversable接口。Iterator并且IteratorAggregate两者都进行了扩展Traversable(而AFAIK只是这样做的)。

但是不,实现的对象Traversable不会通过is_array()检查,也没有内置is_iterable()函数。您可以使用的支票是

function is_iterable($var) {
    return (is_array($var) || $var instanceof Traversable);
}

需要明确的是, 所有的 php对象都可以使用foreach进行迭代,但是只有 其中一些
实现Traversable。因此,所提供的is_iterable功能不会检测到foreach可以处理的所有事情。



 类似资料:
  • 本文向大家介绍PHP 类型提示标量类型,数组和可调用对象,包括了PHP 类型提示标量类型,数组和可调用对象的使用技巧和注意事项,需要的朋友参考一下 示例 在PHP 5.1中,使用关键字添加了对类型提示数组参数的支持(以及PHP 7.1之后的返回值)array。任何尺寸和类型的数组以及空数组都是有效值。 在PHP 5.4中添加了对类型提示可调用对象的支持。is_callable()对于参数有效的任何

  • 问题内容: 因此,在PHPDoc中,可以在成员变量声明上方指定以提示其类型。然后是一个IDE,例如。PHPEd将知道它正在使用哪种类型的对象,并且能够为该变量提供代码见解。 这非常有用,直到我以后需要遍历这些对象时,我需要对一组对象进行相同的操作才能获得正确的提示。 因此,有没有一种方法可以声明一个PHPDoc标记以指定成员变量是s 的数组?例如,数组是不够的,而且似乎无效。 问题答案: 采用:

  • 问题内容: 我的问题与python中的sum函数有关。 所以我的代码是 我读到一个错误: 有人可以解释为什么会发生这种情况以及如何解决吗? 问题答案: 查看文档: sum(iterable [,开始]) 总和从左到右依次迭代一个项目,并返回总计。start默认为。可迭代项通常是数字,并且起始值不允许为字符串。 因此,您必须传递一个可迭代的参数,而不是整数! 应该可以正常工作。 此功能旨在在列表中存

  • 问题内容: 我在尝试解决JQuery $ .each()迭代时遇到一些真正的困难 这是我的数组,为方便起见,限制了结果 我的第一个$ .each迭代效果很好,但是“ EVENTS”的子迭代是我遇到问题的地方 我的第一个$ .each()函数 我无法使用的第二个$ .each()函数 我在(松散地)理解这不是单个JSON对象,而是对象的JSON数组,但不了解第一个版本是否有效,第二个版本为什么不起作

  • 问题内容: 我正在尝试迭代由numpy.linspace生成的值的数组: 这段代码在我的办公室计算机上工作正常,但是今天早上我坐下来在另一台机器上在家工作,出现了此错误: 只是一个浮点数数组,脚本在打印内容时没有问题-只是显然对它们进行了迭代。关于导致它损坏的原因的任何建议以及可能的解决方法? 问题答案: 给您一维NumPy数组。例如: 因此: 无法工作。您将需要某种二维数组,在第二维中具有两个元

  • 问题内容: 我正在尝试运行一个for循环。这是我遇到问题的代码部分: 因此,我的目的是遍历aldurstengd_ororka,对于字典中的每个“年龄”元组,我为元组中的每个“项目”运行另一个for循环。我得到的错误是 TypeError:“ int”对象不可迭代 问题答案: 如果是字典,则此表达式: 是一个错误。也许您的意思是: 编辑:您看到的错误是非常有趣的,我确实使用此代码段重现了它: 代码