如何将ArrayIterator切成两部分?

I've got this code

$second_half = $items; //ArrayIterator Object;
$first_half = array_slice($second_half ,0,ceil(count($second_half)/2));

This gives the warning Warning: array_slice() expects parameter 1 to be array, object given Is there a way to slice an ArrayIterator object in two?

Basically I want one half of the unknown amount of items stored in $first_half and the remaining items $second_half; the result would be two ArrayIterator objects with two different sets of items.

It would appear you can use the getArrayCopy method of the ArrayIterator. This will return an array that you can then manipulate.

As for assigning one half of the results to a new ArrayIterator, and the other half to another ArrayIterator, you wouldn't need to reduce it to an array. You could simply use the count and append methods of the Iterator itself:

$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 );
}

This results in two new ArrayIterator's being constructed:

ArrayIterator Object ( $partA )
(
    [0] => Foo
    [1] => Bar
    [2] => Fiz
)
ArrayIterator Object ( $partB )
(
    [0] => Buz
    [1] => Tim
)

Modify the ternary condition as needed.

$first_half = new LimitIterator($items, 0, ceil(count($items) / 2));
$second_half = new LimitIterator($items, iterator_count($first_half));

This will get you 2 iterator which will allow you to only iterate over a half of the original $items.