3

PHP サイトにはArrayIterator、基本的なパラメーター参照以外のオブジェクトに関するドキュメントはありません。そのため、これが可能かどうかさえわかりません。

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);

この場合、残りの親要素 (a、b、c)の最後'b'(順番に処理する必要はない) に、親要素であるかのように解析する必要がある多数の子要素があるという考え方です。.

通常、私はちょうど使用します...

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 ループ内から現在反復中の配列に要素を追加することは可能ですか?

4

1 に答える 1

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

デモ

于 2016-01-22T20:26:50.757 に答える