4

PHPDOCから

iterator_to_array —イテレータを配列
配列にコピーしますiterator_to_array(Traversable $ iterator [、bool $ use_keys = true])

すべての TraversableInterfaceで機能しますが、次のコードで間違った入力が行われるのはなぜですか。

$data = array(
  0 => array(
    0 => 1,
  ),
  1 => array(
    0 => 2,
  ),
  2 => array(
    0 => 3,
    1 => 4,
    2 => 5,
  ),
  3 => array(
    0 => 6,
  ),
  4 => array(
    0 => 7,
  ),
);


$it =  new RecursiveIteratorIterator(new RecursiveArrayIterator($data));

echo PHP_EOL, iterator_count($it); // 7  total correct
echo PHP_EOL, implode(iterator_to_array($it));  //745  instead of 1234567 
echo PHP_EOL, implode(iterator_to_array($it, true)); //745  instead of 1234567

だが

foreach($it as $v)
{
    echo $v ;
}

出力

1234567

オンラインデモを見る

4

1 に答える 1

4

これは$use_keys、デフォルトでtrueであるため(5.1以降)、配列キーがフラット化されるときに配列キーを壊してしまいます。次のような設定を無効にする必要があります。

print_r(iterator_to_array($it, false));
//                             ^^^^^

PHP <5.2.1を実行している場合は、基本的に失敗しています;-)

于 2012-12-21T10:40:52.140 に答える