PHP: Hypertext Preprocessor (original) (raw)

iterator_to_array

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

iterator_to_array — Copy the iterator into an array

Description

Parameters

iterator

The iterator being copied.

preserve_keys

Whether to use the iterator element keys as index.

If a key is an array orobject, a warning will be generated. [null](reserved.constants.php#constant.null) keys will be converted to an empty string, float keys will be truncated to their int counterpart,resource keys will generate a warning and be converted to their resource ID, and bool keys will be converted to integers.

Note:

If this parameter is not set or set to [true](reserved.constants.php#constant.true), duplicate keys will be overwritten. The last value with a given key will be in the returnedarray. Set this parameter to [false](reserved.constants.php#constant.false) to get all the values in any case.

Return Values

An array containing the elements of the iterator.

Examples

Example #1 iterator_to_array() example

<?php $iterator = new ArrayIterator(array('recipe'=>'pancakes', 'egg', 'milk', 'flour')); var_dump(iterator_to_array($iterator, true)); var_dump(iterator_to_array($iterator, false)); ?>

The above example will output:

array(4) { ["recipe"]=> string(8) "pancakes" [0]=> string(3) "egg" [1]=> string(4) "milk" [2]=> string(5) "flour" } array(4) { [0]=> string(8) "pancakes" [1]=> string(3) "egg" [2]=> string(4) "milk" [3]=> string(5) "flour" }

Found A Problem?

wizzard351 at yahoo dot com

3 years ago

`One important thing to remember is that in iterator can be infinite. Not all iterators necessarily end. If iterator_to_array is used on such an iterator, it will exhaust the available memory, and throw a fatal error.

For example, consider the following code:

c=c = c=a + $b; a=a = a=b; b=b = b=c; goto start; }$fibonacciSequence = fibonacci(); iterator_to_array($fibonacciSequence);?>

Since generates an infinite fibonacci sequence, which is valid, since it is actually an infinite sequence, then attempting to convert it to an array will fail.

`

jerome at yazo dot net

16 years ago

`Using the boolean param :

'a' , 'k2' => 'b', 'k3' => 'c', 'k4' => 'd') ); second=newArrayIterator(array(′k1′=>′X′,′k2′=>′Y′,′Z′));second = new ArrayIterator( array( 'k1' => 'X', 'k2' => 'Y', 'Z' ) );second=newArrayIterator(array(k1=>X,k2=>Y,Z));combinedIterator= new AppendIterator(); combinedIterator−>append(combinedIterator->append( combinedIterator>append(first ); combinedIterator−>append(combinedIterator->append( combinedIterator>append(second );var_dump( iterator_to_array($combinedIterator, false) );?>

will output :

array(7) (
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "X"
[5]=>
string(1) "Y"
[6]=>
string(1) "Z"
)

will output (since keys would merge) :

array(5) (
["k1"]=>
string(1) "X"
["k2"]=>
string(1) "Y"
["k3"]=>
string(1) "c"
["k4"]=>
string(1) "d"
[0]=>
string(1) "Z"
)

`

joksnet at gmail dot com

10 years ago

`To generate an deep array from nested iterators:

iterator,iterator, iterator,use_keys = true) { $array = array(); foreach ($iterator as key=>key => key=>value) { if ($value instanceof \Iterator) { value=iteratortoarraydeep(value = iterator_to_array_deep(value=iteratortoarraydeep(value, $use_keys); } if ($use_keys) { array[array[array[key] = $value; } else { array[]=array[] = array[]=value; } } return $array; } ?>

I use it to test an iterator: https://gist.github.com/jm42/cb328106f393eeb28751

`

Harry Willis

9 years ago

`When using iterator_to_array() on an SplObjectStorage object, it's advisable to set $use_keys to false.

The resulting array is identical, since the iterator keys produced by SplObjectStorage::key() are always integers from 0 to (COUNT-1). Passing $use_keys=false cuts out the unnecessary calls to SplObjectStorage::key(), giving a slight performance advantage.

`