【问题标题】:iterator_to_array truncated outputiterator_to_array 截断输出
【发布时间】:2012-12-08 21:57:15
【问题描述】:

FROM PHP DOC

iterator_to_array — 将迭代器复制到数组中
数组 iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )

它适用于所有Traversable 接口,但为什么我在以下代码中输入错误:

$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

See online Demo

【问题讨论】:

  • 我看到你正在尝试使用RecursiveArrayIterator,你应该完全放弃它并改用array_walk_recursive() =D

标签: php iterator spl


【解决方案1】:

这是因为$use_keys 默认情况下为真(从 5.1 开始),当它被展平时会破坏你的数组键。您需要像这样禁用设置:

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

如果你运行的是 PHP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多