Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用ArrayIterator向元素添加键?_Php_Arrays_Foreach_Append_Arrayiterator - Fatal编程技术网

如何在PHP中使用ArrayIterator向元素添加键?

如何在PHP中使用ArrayIterator向元素添加键?,php,arrays,foreach,append,arrayiterator,Php,Arrays,Foreach,Append,Arrayiterator,除了基本参数引用之外,PHP站点上没有关于ArrayIterator对象的文档,所以我甚至不确定这是否可行 我从基本意义上理解了ArrayIterator的概念,如以下示例: $rows = new ArrayIterator(array('a', 'b', 'c')); foreach ($rows as $row) { echo "<p>This is row {$a}.</p>"; } 其思想是,在本例中,'b'在其余父元素(a、b、c)的末尾(无需按顺序

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

我从基本意义上理解了
ArrayIterator
的概念,如以下示例:

$rows = new ArrayIterator(array('a', 'b', 'c'));
foreach ($rows as $row) {
    echo "<p>This is row {$a}.</p>";
}
其思想是,在本例中,
'b'
在其余父元素(a、b、c)的末尾(无需按顺序处理)有许多子元素,应该像解析父元素一样对其进行解析

通常我会用

foreach ($child as $c) {
    $rows->append($c);
}
但在本例中,
$child
是一个数组,其中包含一个我要维护的键

foreach ($child as $key => $c) {
    $rows->append($c);  // but what about $key???
}
我不想在末尾添加数组作为元素,我想在父列表中添加键和值,这样我们就可以得到

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

问题:是否可以使用键从foreach循环中向当前迭代的数组追加元素?
ArrayInterator
实现
ArrayAccess
接口。这意味着它是可用的,您可以为指定的偏移量指定一个值

如文件所述:

以便能够直接修改循环中的数组元素 在$value前面加上&。在这种情况下,该值将由 参考资料

但在这种情况下不需要

本刊:

a 1
c 2
d 3
e 4
f 5

.

foreach($c作为子项)$rows->append($c)?@u_mulder,这将导致添加新元素,但使用数字键,而不是原始键“d”。抱歉,这里有一个错误,这是一个打字错误,现在正在更正。@u\u mulder更新了示例以使其更清晰。我知道了,但我认为没有办法为
ArrayIterator
。@u\u mulder似乎是这样,但这似乎也是一个很大的缺点,希望有另一种未经记录的方法来完成;)毕竟,他们让你读
->key()
,但不写?太好了!没有意识到我可以混合访问方法,学到了一些新东西:)干杯!我刚刚意识到这里不需要
&
。。。刚刚更新了我的答案
$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