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 的区别 的相关文章

  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • 如何在 Microsoft 报告中显示字节数组中的图像

    我使用报表文件和 ReportViewer 控件来显示在运行时从对象动态加载数据的报表 我需要显示一个以字节数组形式存储在对象中的图像 PictureBox 的值当前设置为 First Fields ImageData Value dtst
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • 将 Google 信任徽章添加到 Magento

    我正在尝试将 Google Trust Badge 添加到我的 magento 商店 我尝试在 Magento 网站上搜索扩展程序 但找不到 我是否需要将以下代码粘贴到产品和结账页面 还是必须对其进行更改 如果有人能引导我走向正确的方向 我
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • 标准转换:数组到指针的转换

    这是ISO的观点 标准转换 数组到指针的转换 4 2 1 数组 类型的左值或右值 N T 或 未知边界的数组 T 可以转换为右值 类型为 指向 T 的指针 结果是 指向第一个元素的指针 数组 如果可能的话 任何人都可以用一个示例程序来解释这
  • 语法错误,第 288 行出现意外的“endif”(T_ENDIF)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我一直在离线处理我的 WordPress 网站的此代码错误 解析错误 语法错误 homez 541 photoher marie
  • WordPress 分页自定义帖子类型

    我有一个名为 新闻 的页面 使用页面模板page newslist php 它应该显示来自自定义帖子类型 也称为新闻 的帖子 我意识到两者具有相同的名称会导致问题 因此在注册自定义帖子类型时 我进行了重写以将其与页面区分开来 rewrite
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • 使用 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