3

我有这个代码

$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具有两组不同项目的两个对象。

4

2 回答 2

3

看来您可以使用getArrayCopyArrayIterator 的方法。这将返回一个您可以操作的数组。

至于将结果的一半分配给 new ArrayIterator,另一半分配给 another ArrayIterator,您不需要将其减少为数组。您可以简单地使用迭代器本身的countand方法: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
)

根据需要修改三元条件。

于 2012-04-13T05:22:16.570 回答
2
$first_half = new LimitIterator($items, 0, ceil(count($items) / 2));
$second_half = new LimitIterator($items, iterator_count($first_half));

这将为您提供 2 个迭代器,这将允许您仅迭代原始$items.

于 2017-12-12T12:07:41.947 回答