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.
$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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With