iterator_to_array

(PHP 5 >= 5.1.0, PHP 7)

iterator_to_arrayКопирует итератор в массив

Описание

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

Копирует элементы итератора в массив.

Список параметров

iterator

Копируемый итератор.

use_keys

Следует ли использовать ключи элементов итератора как индексы.

В PHP 5.5. и новее, если ключ является массивом array или объектом object, то бросается предупреждение. Ключи со значением NULL преобразуются в пустую строку, ключи типа double обрезаются до их целочисленных integer частей, ключи с ресурсами resource бросают предупреждение и преобразуются в их идентификаторы ресурса, а булевы boolean ключи преобразуются в целые числа.

Возвращаемые значения

Массив (array), содержащий элементы итератора (iterator).

Список изменений

Версия Описание
5.5.0 iterator_to_array() стал поддерживать ключи с типами отличными от integer и string, если включен параметр use_keys.
5.2.1 Добавлен параметр use_keys.

Примеры

Пример #1 Пример использования iterator_to_array()

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

Результат выполнения данного примера:

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"
}

Коментарии

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_dumpiterator_to_array($combinedIteratorfalse) );

?>

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($combinedIteratortrue) );

?>

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"
)
2008-12-10 00:42:37
http://php5.kiev.ua/manual/ru/function.iterator-to-array.html
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
2014-10-26 22:36:33
http://php5.kiev.ua/manual/ru/function.iterator-to-array.html
Автор:
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.
2015-06-08 00:21:28
http://php5.kiev.ua/manual/ru/function.iterator-to-array.html
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;
}
2017-01-22 06:26:54
http://php5.kiev.ua/manual/ru/function.iterator-to-array.html
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:

<?php

function fibonacci(): Generator
{
    yield 
$a 1;
    yield 
$b 2;

   
start:
    yield 
$c $a $b;
   
$a $b;
   
$b $c;
    goto 
start;
}

$fibonacciSequence fibonacci();
iterator_to_array($fibonacciSequence);

?>

Since <?php fibonacci(); ?> 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.
2022-03-21 17:55:58
http://php5.kiev.ua/manual/ru/function.iterator-to-array.html

    Поддержать сайт на родительском проекте КГБ