8

この他の回答に見られるように、2つの同じサイズの配列を同時に反復する方法はいくつかあります。ただし、すべての方法にはかなり重大な落とし穴があります。提案された方法に関する注意事項のいくつかを次に示します。

  • FALSE配列の1つで値を使用することはできません。
  • 配列の1つでのみスカラー値を使用できます。
  • 数値インデックス付き配列を使用する必要があります。
  • 両方のアレイが同じキーを共有する必要があります。
  • 等。

私の質問は-これらの(または他の)重要な警告のいずれにも悩まされないこれを行うための方法はありますか?

私は単に好奇心からこれを求めていることを覚えておいてください。私はユースケースを考えていません。また、そのようなケースが実際に存在するのか、それとも実際のシナリオで役立つ/実用的であるのかさえわかりません。ただし、ここにいくつかのサンプルデータがあります。

$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ];
$arr2 = [ 'foo', TRUE, 7 ];
4

3 に答える 3

24

あなたは使用することができますMultipleIterator

$iterator = new MultipleIterator;
$iterator->attachIterator(new ArrayIterator($array1));
$iterator->attachIterator(new ArrayIterator($array2));

foreach ($iterator as $values) {
    var_dump($values[0], $values[1]);
}

さまざまなオプションに関するその他の例は、ドキュメントにあります。

于 2012-04-12T21:44:48.833 に答える
4

PHP 5.5以降、これを行うことができます。

foreach (array_map(null, $array1, $array2) as list($item1, $item2))
{
    var_dump($item1);
    var_dump($item2);
}

http://us3.php.net/manual/en/control-structures.foreach.php#control-structures.foreach.list

于 2013-08-19T18:48:14.940 に答える
1
<?php

$arr1 = array( 'a' => 1, 'b' => FALSE, 'c' => new DateTime() );
$arr2 = array( 'foo', TRUE, 7, 5 );


reset($arr1);
reset($arr2);    

while ( (list($key, $val) = each($arr1))
    && (list($key2, $val2) = each($arr2))
) {
    var_dump($val,$val2);
    // or whatever you wanted to do with them
}

http://www.php.net/manual/en/function.each.php

于 2012-04-12T21:53:56.563 に答える