iterator_to_array

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

iterator_to_arrayCopiar el iterador a un array

Descripción

iterator_to_array(Traversable $iterator, bool $use_keys = true): array

Copia los elementos de un iterador a un array.

Parámetros

iterator

El iterador a copiar.

use_keys

Si usar las claves del elemento iterador como índice.

En PHP 5.5 y posterior, si una clave es un array u object, se generará una advertencia. Las claves null serán convertidas a un string vacío, las claves float serán truncadas a su equivalente integer, las claves resource generarán una advertencia y serán convertidas a sus ID de recurso, y las claves boolean serán convertidas a enteros.

Nota:

Si no se establece este parámetro o se establece a true, las claves duplicadas serán sobrescritas. El último valor con una clave dada estará en el array devuelto. Para obtener todos los valores en cualquier caso, se ha de establecer este parámetro a false.

Valores devueltos

Un array que contiene los elementos del iterator.

Historial de cambios

Versión Descripción
5.5.0 iterator_to_array() da soporte a tipos de claves diferentes a integer y string cuando el parámetro use_keys está habilitado.
5.2.1 Añadido el parámetro use_keys.

Ejemplos

Ejemplo #1 Ejemplo de iterator_to_array()

<?php
$iterator
= new ArrayIterator(array('recipe'=>'panqueques', 'huevo', 'leche', 'harina'));
var_dump(iterator_to_array($iterator, true));
var_dump(iterator_to_array($iterator, false));
?>

El resultado del ejemplo sería:

array(4) {
  ["recipe"]=>
  string(10) "panqueques"
  [0]=>
  string(5) "huevo"
  [1]=>
  string(5) "leche"
  [2]=>
  string(6) "harina"
}
array(4) {
  [0]=>
  string(10) "panqueques"
  [1]=>
  string(5) "huevo"
  [2]=>
  string(5) "leche"
  [3]=>
  string(6) "harina"
}

add a note add a note

User Contributed Notes 5 notes

up
3
jerome at yazo dot net
15 years ago
Using the boolean param :

<?php

$first
= new ArrayIterator( array('k1' => 'a' , 'k2' => 'b''k3' => 'c''k4' => 'd') );
$second = new ArrayIterator( array( 'k1' => 'X', 'k2' => 'Y', 'Z' ) );

$combinedIterator= new AppendIterator();
$combinedIterator->append( $first );
$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"
)

<?php

var_dump
( iterator_to_array($combinedIterator, true) );

?>

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"
)
up
2
joksnet at gmail dot com
9 years ago
To generate an deep array from nested iterators:

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

I use it to test an iterator: https://gist.github.com/jm42/cb328106f393eeb28751
up
-1
Harry Willis
8 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.
up
-2
enelar at develop-project dot ru
7 years ago
Generator approach

function scandir_deep($dir)
{
  foreach (scandir($dir) as $key => $value)
    if (in_array($value, [".",".."]))
      continue;
    else if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
      yield $value => scandir_deep($dir . DIRECTORY_SEPARATOR . $value);
    else
      yield $value;
}
up
-5
chad 0x40 herballure 0x2e com
16 years ago
The use_keys parameter was added in one of the 5.2.x releases; it defaults to TRUE. This matches the behavior in PHP 5.1.6, which lacks this parameter.
To Top