Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O LimitIterator funciona perfeitamente para um array convencional só que quero usa-lo em um array de objetos alguém sabe qual seria o equivalente a um LimitIterator para varrer um array de objetos?
Oi Gabriel Heming, vlw mesmo a força vc ta me ajudando muito to pergunto isso daqui justamente por conta do que você citou no outro tópico, só não dei melhor resposta para você ainda pq pode ser que eu tenha alguma dúvida adicional relacionada com aquele assunto. Tava até na dúvida se ai posta isso naquele tópico ou se criava outro, mas acabei criando outro srsrs.
Bem como você pode notar segui sua dica do LimitIteratore e fiz uma paginação blz, se quiser da uma olhada ta aqui(https://www.dropbox.com/s/3fsot0q60uurqrp/Nova%20pasta.rar)
Mas meu problema é o seguinte quero página uma leitura de dados que vem do banco e coloquei para o banco de dados me retorna um array de objetos, só que a forma que eu to lendo o LimitIteratore é a seguinte.
$lista = new ArrayIterator(array(
'a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r','s','t','u','v','x','z'
));
foreach(new LimitIterator($lista, 0, 3 as $key) {
echo "$key<br />";
}//foreach
Só que essa forma não ta funcionando para o meu array de objetos que eu tiro do banco
Digamos que você use PDO. Farei um exemplo simples, com notícias:
$pdo = new PDO(/** dados de acesso **/);
/** como não serão usados parâmetros no SELECT, não é necessário usar prepared statements **/
$statement = $pdo->query('SELECT * FROM noticias');
/** Agora precisamos do nosso array para o Iterator
Lembrando que é uma matriz de duas dimensões (linhas e colunas) **/
$iterator = new ArrayIterator($statement->fetchAll(PDO::FETCH_ASSOC));
/ LimitIterator agora /
$limitIterator = new LimitIterator($iterator , 0 , 10);
Acredito que era isso que você gostaria.
To usando PDO mesmo, mas relaxe resolve o problema com
$iterator = new ArrayIterator($resultado);
foreach(new LimitIterator($iterator, 0, 10) as $key) {
//apresenta
}
Esse resultado é justamente o PDO::FETCH_OBJECT
Desculpe, mas não entendi muito bem a sua dúvida.
A LimitIterator limita Iterators, ou seja, tudo que implementar a interface Iterator.
Para o caso de você querer um array de objetos, vai depender da forma que você pretende utillizá-la. Ao meu caso, como eu só quero limitar a exibição dos objetos (offset , quantidade), eu utilizo ArrayIterator para tal.
Caso você queira algo mais específico para objetos, você pode utilizar a classe ArrayObject, que permite objetos trabalharem como array. Mas veja bem, ArrayObject não implementa um Iterator, já, ela não pode ser usada diretamente em LimitIterator.
Nesse caso, ArrayObject implementa IteratorAggregate, interface a qual deve ser implementado o método getIterator, que deve retornar um Iterator. Logo você poderá usar assim:
Nota: Por padrão, o Iterator retornado, ao utilizar o método getIterator, é um ArrayIterator.