在实现 ArrayAccess 和 Iterator 的对象上使用 foreach

2024-02-26

有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象的键?数组访问很有魅力,但我不能在那些对象上使用 foreach,这对我有很大帮助。是否可以?到目前为止我有这样的代码:

<?php
class IteratorTest implements ArrayAccess, Iterator {
  private $pointer = 0;

  public function offsetExists($index) {
    return isset($this->objects[$index]);
  }

  public function offsetGet($index) {
    return $this->objects[$index];
  }

  public function offsetSet($index, $newValue) {
    $this->objects[$index] = $newValue;
  }

  public function offsetUnset($index) {
    unset($this->objects[$index]);
  }

  public function key() {
    return $this->pointer;
  }

  public function current() {
    return $this->objects[$this -> pointer];
  }

  public function next() {
    $this->pointer++;
  }

  public function rewind() {
    $this->pointer = 0;
  }

  public function seek($position) {
    $this->pointer = $position;
  }

  public function valid() {
    return isset($this->objects[$this -> pointer]);
  }
}

$it = new IteratorTest();

$it['one'] = 1;
$it['two'] = 2;

foreach ($it as $k => $v) {
  echo "$k: $v\n";
}

// expected result:
// one: 1
// two: 2

感谢您的任何帮助和提示。


我用它来实现迭代器。也许你可以适应你的代码;)

class ModelList implements Iterator{
public $list;
private $index = 0;
public $nb;
public $nbTotal;

/**
 * list navigation
 */
public function rewind(){$this->index = 0;}
public function current(){$k = array_keys($this->list);$var = $this->list[$k[$this->index]];return $var;}
public function key(){$k = array_keys($this->list);$var = $k[$this->index];return $var;}
public function next(){$k = array_keys($this->list);if (isset($k[++$this->index])) {$var = $this->list[$k[$this->index]];return $var;} else {return false;}}
public function valid(){$k = array_keys($this->list);$var = isset($k[$this->index]);return $var;}
/**
 * 
 * Constructor
 */
public function __construct() {
    $this->list = array();
    $this->nb = 0;
    $this->nbTotal = 0;
    return $this;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在实现 ArrayAccess 和 Iterator 的对象上使用 foreach 的相关文章

随机推荐

  • 如何获取 JDesktopPane 中 JInternalFrames 的 z 顺序

    如何获取 JDesktopPane 内所有 JInternalFrame 的 z 顺序 层深度 似乎没有直接的方法 有任何想法吗 虽然我还没有尝试过这个 Container http java sun com javase 6 docs a
  • R Quantmod::getFinancials

    我正在使用quantmod包裹 我有一个这样的股票向量 c AAPL GOOG IBM GS AMZN GE 我想创建一个函数来计算股票的息税前利润 营业收入 总收入 因此 对于给定的股票 我使用以下仅适用于 GE 的代码 前提是在股票代码
  • j2me 应用程序中出现 OutOfMemoryError

    我正进入 状态OutOfMemoryException在 J2ME 应用程序中 我怎样才能找到导致此错误的原因 以及如何防止出现此错误 我发出一个http请求 当请求未完成时 屏幕会显示加载图像 就像浏览器在加载页面时显示的那样 这是通过创
  • 设置 NSAttributed String 属性会覆盖子字符串属性

    我创建了一个可变字符串 看起来像 测试 MeIn 绿色 颜色 不同 绿色 颜色 颜色 NSMutableAttributedString mutableText NSMutableAttributedString alloc initWit
  • 如何访问 Tumblr API 照片数据源(即所有照片、整个档案)?

    我目前正在用 PHP 开发一个项目 该项目通过 Tumblr API 使用我的 api key 连接到 Tumblr 照片博客 以访问指定 Tumblr 照片博客中发布的照片 我使用 Tumblr API 文档开始 并交叉引用了许多网站 包
  • 您可以使用 JavaScript 将多个图像合并为一个图像吗?

    我想知道是否有一种方法可以仅使用 JavaScript 将多个图像组合成单个图像 这是 Canvas 能够做到的吗 效果可以通过定位来完成 但是可以将它们组合成单个图像进行下载吗 2008 年 10 月 1 日更新 感谢您的建议 我正在帮助
  • 使用 UIViewAnimationOptionTransitionCurlDown 自定义 Segue

    我想创建一个自定义 Segue 来用卷曲动画交换 ViewController 但我找不到方法 void 执行此操作会是什么 我有这个 void perform UIViewController dst self destinationVi
  • 为什么 AudioRecord.getMinBufferSize 返回 ERROR_BAD_VALUE (-2)?

    我正在 Samsung Galaxy S i9000 上对此进行测试 int sampleRate 44100 int bufferSize AudioRecord getMinBufferSize sampleRate AudioForm
  • JSON-lib 转义/保留字符串

    我正在使用 Java 的 JSON lib 库http json lib sourceforge net http json lib sourceforge net 我只想添加看起来像 JSON 的简单字符串 但我不希望库自动找出它可能是
  • 使用“全选”时排除禁用的复选框

    我在表中有带有标签的复选框 我在表 全选 之外添加了一个复选框 ID 为 chkbox 现在下面的代码工作正常 这是 选择和取消选择表中的所有复选框 现在有一些页面由于业务逻辑而禁用了一些复选框 我希望这些复选框不应该受到影响
  • Java 创建一个新文件,或者覆盖现有文件

    我想要实现的是创建一个文件 无论该文件是否存在 我尝试使用File createNewFile 但这只会创建该文件 如果该文件尚不存在 我应该使用File delete 进而File createNewFile 或者有更清晰的方法吗 Fil
  • 如何让工具提示在 IE 中显示时间更长

    我得到以下内容 span title 在 Firefox 中 工具提示会一直停留在那里 直到鼠标移动 但在 IS 中 它只停留大约 5 秒 然后消失 有没有办法让它持续更久 没有内置的浏览器工具提示 不 有大量类似工具提示的 UI 组件使用
  • 关于jsp源代码

    我开发了一个非常大的 Web 应用程序 如果我需要在 JSP 页面中进行任何更改 则需要花费太多时间来查找 JSP 页面 链接 操作等 那么 是否有任何工具或技术可以让我直接获取该特定 JSP 页面的代码 我认为 查看来源 是不同的 它只显
  • Hibernate:无法反序列化 - 无效的流标头

    关于如何解决此错误有什么想法吗 我将 Spring JPA 与 Hibernate 一起使用 下面是必要的详细信息 实体类别1 Entity Table name ways TypeDef name hstore typeClass Hst
  • 如何在 Android 的 TabLayout 中使选项卡标题向左对齐

    我似乎无法在 TabLayout 内将选项卡标题向左对齐 目前 标题居中 这是什么I want https i stack imgur com Vy6FP jpg实现 这就是I have https i stack imgur com FY
  • 从 c# 中的 app.config 获取 ConnectionString [重复]

    这个问题在这里已经有答案了 我已经在 app config 文件中定义了我的连接字符串
  • WPF 以编程方式实例化用户控件以将其呈现为 PNG

    我想在 DLL 中以编程方式实例化用户控件 然后将其保存为 PNG 文件 这对于PngBitmapEncoder和RenderTargetBitmap来说一般是没有问题的 这是我的问题 如何实例化该控件 简单地使用 new operator
  • Pandas 将零替换为最接近的平均非零值

    我有一个数据框 df pd DataFrame A 0 0 15 0 0 12 0 0 0 5 我想用最接近的非零值替换 0 值 比如第一个值是0 那么我发现最接近的非零值是15 所以我把它替换为15 那么数据就变成了 15 0 15 0
  • 即使存在未设置为 true,Rails 验证也需要数字

    我正在尝试保存一条没有设置字段的记录 该记录在模型中具有验证数值 即使验证中不需要存在 它仍然会抛出该字段不是数字的错误 验证 validates network id numericality gt true 保存模型的代码 networ
  • 在实现 ArrayAccess 和 Iterator 的对象上使用 foreach

    有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象的键 数组访问很有魅力 但我不能在那些对象上使用 foreach 这对我有很大帮助 是否可以 到目前为止我有这样的代码