Percorrendo arrays com SPL e ArrayIterator
Neste artigo iremos estudar como percorrer vetores por meio da biblioteca SPL e a classe ArrayIterator.
A Biblioteca SPL (Standard PHP Library) é um conjunto de classes e interfaces em PHP que implementam algumas formas comuns de acessos à dados. São projetadas para manipular estruturas complexas como arrays, xml, diretórios, consultas ao banco de dados, dentre outros.
Dentro da biblioteca SPL, a classe ArrayObject permite manipular vetores por meio de uma interface totalmente orientada a objetos. O último artigo que escrevemos demonstrou como manipular vetores utilizando a classe ArrayObject. Neste artigo vamos mostrar como poderemos iterar vetores de forma orientada a objetos. A classe ArrayObject é utilizada somente para manipular e acessar vetores de forma orientada a objetos, para percorrê-los, é necessário utilizar a classe ArrayIterator.
Pela forma tradicional, utilizamos da seguinte maneira:
<?php
// cria o vetor
$array = array('laranja', 'tangerina', 'tomate', 'alface', 'pepino', 'melancia', 'banana', 'abacaxi');
// percorre o vetor
foreach($array as $key=>$value)
{
echo $value."<br>\
";
}
?>Utilizando a SPL, classe ArrayIterator poderá ser utilizada para percorrer vetores de forma orientada a objetos. As diferênças são muito pequenas e implícitas. Enquanto o modo tradicional percorre o vetor alocando o mesmo inteiro na memória, o ArrayIterator carrega na memória apenas o elemento corrente. Esta forma de utilização pode ser muito útil quando estamos trabalhando com vetores muito grandes, contendo estruturas aninhadas de objetos.
Muitos dos métodos da classe ArrayObject, como offsetGet() e offsetSet() também estão disponíveis na classe ArrayIterator.
<?php
// cria o vetor
$array = array('laranja', 'tangerina', 'tomate', 'alface', 'pepino', 'melancia', 'banana', 'abacaxi');
$arrayObj = new ArrayIterator($array);
try
{
// percorre o ArrayIterator
foreach($arrayObj as $key=>$value)
{
echo $value."<br>\
";
}
// reposiciona o ponteiro interno
$arrayObj->rewind();
// exibe o elemento atual
echo $arrayObj->current();
}
catch (Exception $e)
{
echo $e->getMessage();
}
?>









