Data referring to images being repeated when reading XML

Asked

Viewed 98 times

2

I’m trying to get image data from a xml but I’m having a hard time doing it, the record I’m reading is being overwritten. I made a first foreach and I can find the date I need, but now I need to enter an extra level to search for data from some images and I’m not getting it, the code even looks for the first record correctly but in the sequence occurs this overlap. The code I have is this:

require_once ('../Connections/conn.php');

mysql_select_db($database_conn, $conn);
$query_rcCidades = "SELECT * FROM PrevisaoCidade WHERE PrevisaoCidade.ativo = 1 ORDER BY PrevisaoCidade.IdCidade";
$rcCidades = mysql_query($query_rcCidades, $conn) or die(mysql_error());
$row_rcCidades = mysql_fetch_assoc($rcCidades);
$totalRows_rcCidades = mysql_num_rows($rcCidades);

do {

    // CIDADES CADASTRADAS
    $cCidades = 6683;

    $urlIcon = 'http://api.climatempo.com.br/api/v1/forecast/15days/icon?idlocale="'.$cCidades.'"';

    // PERMISSÃO 
    $post = array(
        'key' => '', // chave de pedido
        'client' => '', // login do cliente
        'nocache' => true, // desabilitar cache
        'type' => 'xml', // tipo de retorno json ou xml
        'application' => 'Previsão 15 dias - Cidades'
    ); 

    // OBTENDO PERMISSÃO  
    $http = array(  
        'method' => 'POST',  
        'header' => 'Content-type: application/x-www-form-urlencoded',  
        'content' => http_build_query($post)  
    );  

    $context = stream_context_create(array('http' => $http));   

    // ÍCONE
    $request = file_get_contents($urlIcon, true, $context); 
    $itemIcone =  simplexml_load_string($request); 


    // SELECIONANDO ÍCONE
    $IcoManha = null;
    $IcoTarde = null;
    $IcoNoite = null;
    $IcoDia = null;     

    // A VARIÁVEL $ItemIcone CONTÉM O XML CARREGADO
    foreach($itemIcone->data->item->weather->item as $reg) {   

        // ZERANDO O ARRAY
        $data = array();


            // ÍCONES  
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'date' => (string)$reg['date'],

            );

            $Data = $data['api']['data']['item']['weather']['item'][0]['date'];     


            // SEGUNDO FOREACH PARA BUSCAR AS IMAGENS
            // A VARIÁVEL $ItemIcone CONTÉM O XML CARREGADO
            foreach($itemIcone->data->item->weather->item->icon as $regs) {  

                $dataIcon = array();

                $dataIcon['api']['data']['item']['weather']['item']['icon'][] = array 
                (
                    // LENDO OS NÓS
                    'morning' => (string)$regs['morning'],
                    'afternoon' => (string)$regs['afternoon'],
                    'night' => (string)$regs['night'],
                    'day' => (string)$regs['day'],

                );

                // ATRIBUINDO AS VARIÁVEIS  
                $IcoManha = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['morning'];
                $IcoTarde = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['afternoon'];
                $IcoNoite = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['night'];
                $IcoDia   = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['day'];                  

            }

            echo "DATA: " . $Data . " MANHA:" . $IcoManha . " TARDE: " . $IcoTarde . " NOITE: " . $IcoNoite . " DIA: " . $IcoDia . "
"; // echo "DATA: " . $Data . "MANHA:" . $IcoManha . " TARDE: " . $IcoTarde . " NOITE: " . $IcoNoite . " DIA: " . $IcoDia . "
"; } } while ($row_rcCidades = mysql_fetch_assoc($rcCidades));

The xml is this:inserir a descrição da imagem aqui

The visualization of the attempt results in this: inserir a descrição da imagem aqui

  • was wrong my answer, so I changed the code

1 answer

2


In fact they are not repeating or overlapping, you who are changing the value so that it is ALWAYS the same thanks to the second foreach. To understand better take this test:

    <!-- codigo anterior -->

    echo "DATA: ". $Data; // coloquei o echo antes do segundo foreach.

    // SEGUNDO FOREACH PARA BUSCAR AS IMAGENS
    // A VARIÁVEL $ItemIcone CONTÉM O XML CARREGADO
    foreach($itemIcone->data->item->weather->item->icon as $regs) {  

        $dataIcon = array();

        $dataIcon['api']['data']['item']['weather']['item']['icon'][] = array 
        (
            // LENDO OS NÓS
            'morning' => (string)$regs['morning'],
            'afternoon' => (string)$regs['afternoon'],
            'night' => (string)$regs['night'],
            'day' => (string)$regs['day'],

        );

        // ATRIBUINDO AS VARIÁVEIS  
        $IcoManha = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['morning'];
        $IcoTarde = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['afternoon'];
        $IcoNoite = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['night'];
        $IcoDia   = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['day'];                  

        echo " MANHA:" . $IcoManha . " TARDE: " . $IcoTarde . " NOITE: " . $IcoNoite . " DIA: " . $IcoDia . "";  // o echo fica dentro do foreach

    }

     <!-- restante do código -->

I didn’t take the test, but now he’s probably released several records with repeated dates, right? That you don’t want either.

SOLUTION (suggestion)

$dadosData = array(); // array que vamos usar para data
$dadosImg = array(); // array que vamos usar para iagens

// A VARIÁVEL $ItemIcone CONTÉM O XML CARREGADO
foreach($itemIcone->data->item->weather->item as $reg) {   

    // ZERANDO O ARRAY
    $data = array();

    // ÍCONES  
    $data['api']['data']['item']['weather']['item'][] = array 
    (
        // LENDO OS NÓS
        'date' => (string)$reg['date'],

    );

    $Data = $data['api']['data']['item']['weather']['item'][0]['date'];     

    $dadosData[] = "DATA: ". $Data; // aqui vão sendo inseridos os valores da data

    // SEGUNDO FOREACH PARA BUSCAR AS IMAGENS
    // A VARIÁVEL $ItemIcone CONTÉM O XML CARREGADO
    foreach($reg -> icon as $regs) {  

        $dataIcon = array();

        $dataIcon['api']['data']['item']['weather']['item']['icon'][] = array 
        (
            // LENDO OS NÓS
            'morning' => (string)$regs['morning'],
            'afternoon' => (string)$regs['afternoon'],
            'night' => (string)$regs['night'],
            'day' => (string)$regs['day'],

        );

        // ATRIBUINDO AS VARIÁVEIS  
        $IcoManha = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['morning'];
        $IcoTarde = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['afternoon'];
        $IcoNoite = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['night'];
        $IcoDia   = $dataIcon['api']['data']['item']['weather']['item']['icon'][0]['day'];                  

        $dadosImg[] = "MANHA:" . $IcoManha . " TARDE: " . $IcoTarde . " NOITE: " . $IcoNoite . " DIA: " . $IcoDia . "";  // insere os valores das imagens

    }

}

// loop para resgatar os valores

for($x = 0; $x < count($arrayData); $x++){

    echo $dadosData[$x].$dadosImg[$x]; // mostra todos os valores

}

Comments from the Code: That code is inside the loop do, I set the value of the first foreach for the second and launched the rescued values in the arrays, then made a loop for outside the foreachand printed out these variables.

  • 1

    Hello @Andrei Coelho, thank you so much for the excellent tips, helped me too, I am grateful for the quality of the code.

  • @adventistapr quiet, glad I can help.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.