PHP 中 ArrayIterator、ArrayObject 和 Array 的区别

2024-01-08

有人可以清楚地解释一下之间的根本区别吗ArrayIterator, ArrayObject and ArrayPHP的功能和操作方面?谢谢!


Array是原生 php 类型。您可以使用 php 语言构造创建一个array(),或从 php 5.4 开始[]

ArrayObject is an object其工作原理与数组完全相同。这些可以使用创建new keyword

ArrayIterator就好像ArrayObject但它可以自我迭代。还使用创建new


比较Array vs (ArrayObject/ArrayIterator)

它们都可以使用 php 的数组语法来使用,例如。

$array[] = 'foo';
$object[] = 'foo';
// adds new element with the expected numeric key

$array['bar'] = 'foo';
$object['bar'] = 'foo';
// adds new element with the key "bar"

foreach($array as $value);
foreach($object as $value);
// iterating over the elements

但是,它们仍然是对象与数组,因此您会注意到以下方面的差异

is_array($array); // true
is_array($object); // false

is_object($array); // false
is_object($object); // true

大多数 php 数组函数都需要数组,因此使用对象会引发错误。这样的功能有很多。例如。

sort($array); // works as expected
sort($object); // Warning: sort() expects parameter 1 to be array, object given in ......

最后,对象可以做你所期望的事情stdClass对象,即使用对象语法访问公共属性

$object->foo = 'bar'; // works
$array->foo = 'bar'; // Warning: Attempt to assign property of non-object in ....

数组(作为本机类型)比对象快得多。另一边,ArrayObject & ArrayIterator类定义了某些可以使用的方法,而数组则没有这样的方法


比较ArrayObject vs ArrayIterator

这两个之间的主要区别在于类所具有的方法。

The ArrayIterator实施Iterator接口,它提供了与元素迭代/循环相关的方法。ArrayObject有一个方法叫做exchangeArray将其内部数组与另一个数组交换。实现类似的事情ArrayIterator意味着要么创建一个新对象,要么循环遍历键 &unset将它们一一删除,然后将新数组中的元素一一设置。

接下来,自从ArrayObject当您在中使用它时,无法迭代foreach它创造了一个ArrayIterator内部对象(与数组相同)。这意味着 php 创建原始数据的副本,并且现在有 2 个具有相同内容的对象。这对于大型阵列来说是低效的。但是,您可以指定要使用哪个类作为迭代器,这样您就可以在代码中使用自定义迭代器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中 ArrayIterator、ArrayObject 和 Array 的区别 的相关文章

随机推荐

  • 使用 HttpServer 或 HttpSelfHostServer 对 Web API 进行单元测试

    我正在尝试为 Web API 项目进行一些单元测试 我将模拟 Web API 托管环境 看来我可以使用内存主机 HttpServer 或自主机 HttpSelfHostServer 只是想知道有什么区别 哪种技术有什么好处 以及这些选项是否
  • Git-Svn dcommit 导致分支分裂

    我遇到了 git svn dcommits 问题 导致 git 存储库无法跟踪哪些提交 我尝试确保 git 中的 master 分支始终遵循 SVN 存储库中的 trunk 所以每当我工作时 我都会在一个主题分支上 这是我的场景 在主题分支
  • php 中的长计算会导致 503 错误

    我的脚本需要很长时间才能执行 结果服务器响应 503 错误 如何设置更长的执行时间 在我的 PHP 脚本中我设置 set time limit 0 ignore user abort true 这个问题非常类似于PHP 后台进程 https
  • 将数据库从sql server 2008 r2备份恢复到2008

    我需要将sql server 2008R2上的数据库备份和恢复到sql server 2008 备份文件不兼容这种方式 我发现的另一个选项是生成包含数据的脚本 由于我使用大量外键对数据库进行了规范化 插入会成功吗 还有其他可靠的方法吗 正如
  • Web Audio API:停止播放所有预定的声音

    所以我有一堆加载的音频样本 我在下面的代码中调用调度函数 let audio function playChannel let audioStart context currentTime let next 0 for let i 0 i
  • 如何获取离线安装的所有nuget依赖项

    我使用两台电脑 一台有互联网连接 另一台没有互联网连接 我想在脱机计算机上安装 Nuget 包 Nuget server 及其所有依赖项 不幸的是 仅仅下载软件包本身是不可能的 我必须手动下载所有依赖项 而且有几十个依赖项 如何在具有 In
  • 希望从大量 javascript 文件中删除注释

    这是我的困境 我是一个 javascript 菜鸟 目前正在实习并帮助维护两个电子商务网站 我最近被指派删除我们 javascript 库中出现的所有评论 超过 25 000 条评论 显然我想找到一个函数或一些预先存在的程序 可以解析代码
  • 如何更改滑动(可可)自定义工作表的点?

    我想在我的 Mac 应用程序中使用一个带有自定义高度标题栏的主窗口 例如 sparrow twitter 应用程序 mac 阅读器等 我在用着https github com indragiek INAppStoreWindow https
  • SQL Server Nvarchar 和 Java 准备好的语句

    我有一个关于将字符串插入 SQL Server 2008 R2 的问题 当我尝试插入带有一些国家 地区字母的字符串时 我收到 反而 我知道添加N在字符串文字的开头可以解决这个问题 但我使用的是 JDBC 准备好的语句 如下所示 INSERT
  • Selenium:如何通过部分href查找元素?

    工作代码1 Driver Instance FindElement By XPath a contains href PartialLinkHref 工作代码2 ReadOnlyCollection
  • 如何查找基类库中实现特定接口的类型列表?

    有时我想找出实现特定接口的所有标准 NET 类型的列表 通常是出于好奇 有时也有一些实际目的 但这不是重点 我试图从 MSDN 中获取此内容 但类型的页面仅包含类型的子级链接 而不包含实现接口的类型 您知道如何做到这一点的任何技巧 或有帮助
  • 选择R中n个最远的点

    给定一组 xy 坐标 如何选择 n 个点以使这 n 个点彼此距离最远 一种低效方法可能不适用于大数据集 如下所示 从 1000 个点中找出距离最远的 20 个点 xy lt cbind rnorm 1000 rnorm 1000 n lt
  • 为什么 Retrofit 会在所有 URL 中添加尾部斜杠?

    编辑问题并提供更多详细信息 我了解Retrofit中服务接口的使用 我想调用这样的 URL http a com b c http a com b c 稍后使用服务接口附加查询参数 我的限制是 I cannot使用 b c 作为服务接口的一
  • 在 python 的端到端管道内的数据帧上使用 TimeSeriesSplit() 应用交叉验证的最佳实践是什么?

    假设我有dataset https drive google com file d 18PGLNnOI44LVFignYriBWQFW9WBkTX5c view usp share link在以下范围内pandas questions ta
  • 在系数之间添加乘号 (*)

    我有一个程序 用户在其中输入一个函数 例如sin x 1 我在用着ast尝试通过将组件列入白名单来确定字符串是否 安全 如下所示这个答案 https stackoverflow com a 11952618 4414003 现在我想解析字符
  • SQL将兼容性矩阵转换为映射表(列转换为行)

    我有下表 我想将矩阵转换为这种格式 其中新映射表表示一组选项和使用这些选项的一组模型之间的兼容性 而数值表示该特定模型的选项的价格 请记住 这只是一个更大的表中的一个小样本 因此查询需要或多或少是动态的 而不是根据本示例中提供的选项或模型的
  • 是否可以将 IronPython asp.net Webform 关联到 dll 文件?

    在具有普通 ASP 模型的 ASP NET 中 您可以通过继承 dll 内的类来将 aspx 文件的代码文件存储在 dll 中 在 IronPython 中 您有另一个模型 aspx 页面中的唯一选项是 代码文件 并且没有 继承 我的问题是
  • 如何在加载应用程序时显示图像

    我有一个应用程序 windows form net 我的 form1 需要很长时间才能出现 因为在它的事件中form1 Load做了很多操作 我的目标是在手术进行时显示图像 private void form1 Load object se
  • Akka Stream + Akka Http - 获取错误请求

    我有以下效果很好的流 source map x gt HttpRequest uri x rawRequest via Http outgoingConnection host port to Sink actorRef myActor I
  • PHP 中 ArrayIterator、ArrayObject 和 Array 的区别

    有人可以清楚地解释一下之间的根本区别吗ArrayIterator ArrayObject and ArrayPHP的功能和操作方面 谢谢 Array是原生 php 类型 您可以使用 php 语言构造创建一个array 或从 php 5 4