我有这段代码
$second_half = $items; //ArrayIterator Object;
$first_half = array_slice($second_half ,0,ceil(count($second_half)/2));
这会发出警告警告:array_slice()期望参数1为数组,给定对象
有没有办法将ArrayIterator
对象分成两部分?
基本上我想要$first_half
中存储的未知数量项目的一半和剩余项目$second_half
;结果将是两个具有两组不同项目的ArrayIterator
个对象。
答案 0 :(得分:3)
看起来您可以使用ArrayIterator的getArrayCopy
方法。这将返回一个您可以操作的数组。
至于将一半结果分配给新ArrayIterator
,另一半分配给另一半ArrayIterator
,您不需要将其减少为数组。您只需使用迭代器本身的count
和append
方法:
$group = new ArrayIterator;
$partA = new ArrayIterator;
$partB = new ArrayIterator;
$group->append( "Foo" );
$group->append( "Bar" );
$group->append( "Fiz" );
$group->append( "Buz" );
$group->append( "Tim" );
foreach ( $group as $key => $value ) {
( $key < ( $group->count() / 2 ) )
? $partA->append( $value )
: $partB->append( $value );
}
这会导致构建两个新的ArrayIterator
:
ArrayIterator Object ( $partA )
(
[0] => Foo
[1] => Bar
[2] => Fiz
)
ArrayIterator Object ( $partB )
(
[0] => Buz
[1] => Tim
)
根据需要修改三元条件。
答案 1 :(得分:1)
$first_half = new LimitIterator($items, 0, ceil(count($items) / 2));
$second_half = new LimitIterator($items, iterator_count($first_half));
这将为您提供2个迭代器,它允许您只迭代原始$items
的一半。