TransWikia.com

Como eu posso melhorar este loop que tem um foreach dentro de outro?

Stack Overflow em Português Asked by Marcos Vinicius on December 22, 2020

Estou fazendo este código que tem 2 foreach’s e carrega 350 imóveis com mais ou menos 3500 links de imagens, na verdade não chamei as fotos, só os links, isso tudo carrega em meio segundo.

A variável $array armazena conteúdo de um XML. Dentro desse XML tem várias informações inclusive arrays de informações como Media que armazena todas as imagens do imóvel.

No caso abaixo, o segundo array pega $imovel->Media->Item e faz uma listagem das fotos que estão no imóvel.

<?php

$xml = simplexml_load_file("xml_vivareal.xml") or die("Error: Cannot create object");
$array = $xml->Listings->Listing;
$number = 1;

foreach ($array as $imovel) {
    echo $number++ ." - ". $imovel->ListingID . "<br>";
    echo $imovel->Title . "<br>";

    foreach ($imovel->Media->Item as $fotos) {
        echo $fotos . "<br>";
    }

    echo "<br>";
}

Resultado produzido:

inserir a descrição da imagem aqui

One Answer

Uma maneira alternativa é armazenando o conteúdo HTML e imprimir (echo) tudo no final, podendo assim usar a função implode no lugar do foreach interno.

Veja o código abaixo:

<?php
$xml = simplexml_load_file("xml_vivareal.xml") or die("Error: Cannot create object");
$array = $xml->Listings->Listing;
$number = 1;
$html = '';

foreach ($array as $imovel) {
    $html .= $number++ ." - ". $imovel->ListingID . "<br>";
    $html .= $imovel->Title . "<br>";

    $html .= implode("<br>", $imovel->Media->Item);

    $html .= "<br>";
}

echo $html;

?>

Acredito que dessa maneira o código fique mais limpo e elegante. Com relação à performance, seria bom que você fizesse um teste nas duas versões e postasse o resultado.

Answered by Brittz on December 22, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP