如何在 PHP 中使用 ArrayIterator 为元素附加一个键?

Posted

技术标签:

【中文标题】如何在 PHP 中使用 ArrayIterator 为元素附加一个键?【英文标题】:How do I append an element with a key using ArrayIterator in PHP? 【发布时间】:2016-04-29 12:59:20 【问题描述】:

除了基本参数参考之外,php 站点上没有关于 ArrayIterator 对象的文档,所以我什至不确定这是否可行。

我从基本意义上理解ArrayIterator 的概念,例如这个例子:

$rows = new ArrayIterator(array('a', 'b', 'c'));
foreach ($rows as $row) 
    echo "<p>This is row $a.</p>";

在我的例子中,rows 数组稍微复杂一些(尽管为了这个例子仍然简化了)...

$rows = array(
    'a' => NULL,
    'b' => array('d' => NULL, 'e' => NULL, 'f' => NULL),
    'c' => NULL
);
$rows = new ArrayIterator($rows);

这个想法是 'b' 在这种情况下,有许多子元素应该像父元素一样被解析,在末尾​​em>(不需要按顺序处理)其余的父元素 (a,b,c)。

通常我只会使用...

foreach ($child as $c) 
    $rows->append($c);

但在这种情况下,$child 是一个带有我想要维护的键的数组...

foreach ($child as $key => $c) 
    $rows->append($c);  // but what about $key???

我不想在最后添加一个数组作为元素,我想将 keyvalue 添加到父列表中,这样我们就结束了跟上....

$rows = array(
    'a' => ...,
    'b' => ...,
    'c' => ...,
    'd' => ...,
    'e' => ...,
    'f' => ...
);

问题:是否可以在 foreach 循环中使用键将元素附加到当前迭代的数组中?

【问题讨论】:

foreach ($child as $c) $rows-&gt;append($c);? @u_mulder 这将导致添加新元素,但使用数字键,而不是原始键“d”。抱歉,这里有一个错误,这是一个错字,现在更正。 @u_mulder 将示例更新为更清晰 我知道了,但我认为没有办法为ArrayIterator 设置密钥。 @u_mulder 似乎是这样,但这似乎也是一个很大的缺点,希望还有另一种未记录的方式来做到这一点;)毕竟,他们让你阅读-&gt;key(),然后不写是吗? 【参考方案1】:

ArrayIterator 实现ArrayAccess 接口。这意味着offsetset 可用,您可以为指定的偏移量赋值。

正如foreach 文档所说:

为了能够在循环内直接修改数组元素 在 $value 之前加上 &。在这种情况下,该值将由 参考。

但在这种情况下不需要。

$rows = array(
    'a' => 1,
    'b' => array('d' => 3, 'e' => 4, 'f' => 5),
    'c' => 2
);

$rows = new ArrayIterator($rows);

foreach ($rows as $key => $row) 
    if (is_array($row))  
        foreach ($row as $key => $c) 
            $rows[$key] = $c;
        

        // skip this
        continue;
    

    echo $key, " ", $row, "\n";

这个印刷品:

a 1
c 2
d 3
e 4
f 5

Demo.

【讨论】:

太棒了!没有意识到我可以混合访问方法,学到了新东西:) 干杯! 我刚刚意识到这里不需要&amp;...刚刚更新了我的答案

以上是关于如何在 PHP 中使用 ArrayIterator 为元素附加一个键?的主要内容,如果未能解决你的问题,请参考以下文章

php 迭代器与和生成器

如何在 Java 中实现过滤迭代器?

如何将js的变量在php中使用

如何在 PHP 中使用 ORM

如何在 PHP 文件中使用 etags?

为啥以及如何在 PHP 中使用匿名函数?