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
.