如何在PHP中使用ArrayIterator附加带键的元素?

时间:2016-01-22 20:01:19

标签: php arrays foreach append arrayiterator

基本参数引用之外的ArrayIterator对象的PHP站点上没有文档,因此我甚至不确定这是否可行。

我在基本意义上理解ArrayIterator的概念,例如:

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

就我而言,行数组稍微复杂一些(虽然为了这个例子仍然简化了)...

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

这个想法是'b'在这种情况下,有许多子元素应该被解析,好像它们是父元素,在最后(不需要按顺序处理)其余父元素(a,b,c)。

通常我会使用......

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

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

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

我不想在最后添加数组作为元素,我想将添加到父列表中,这样我们就可以了最终会.... [/ p>

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

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

1 个答案:

答案 0 :(得分:1)

module.exports = function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', '*'); res.header('Access-Control-Expose-Headers', 'myCookie'); if ('OPTIONS' == req.method) { res.sendStatus(200); } else { next(); } }; 实现ArrayIterator接口。这意味着offsetset可用,您可以为指定的偏移量指定一个值。

foreach文件所述:

  

为了能够直接修改循环内的数组元素   使用&amp;前面的$ value。在这种情况下,值将由   参考

但在这种情况下不需要。

ArrayAccess

此印刷品:

$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";
}

Demo