DOMANDA [PHP] Estrarre key di un'array creato con simplexml_load_file

[>>VK<<]

Utente Attivo
108
0
Mi sapreste dire come posso fare per recupereare le [key] di un'array creato con la funzione simplexml_load_file?

Codice:
SimpleXMLElement Object
(
    [Day] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4553
                        )

                    [Date] => 220412
                    [Energy] => 2
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4553
                        )

                    [Date] => 170612
                    [Energy] => 403
                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4554
                        )

                    [Date] => 180612
                    [Energy] => 1500
                )

            [3] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4555
                        )

                    [Date] => 220412
                    [Energy] => 2
                )

            [4] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4556
                        )

                    [Date] => 170612
                    [Energy] => 403
                )

            [5] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Num] => 4557
                        )

                    [Date] => 180612
                    [Energy] => 1500
                )

        )

)

in pratica mi servirebbe raggiungere e estrarre gli indici dell'array contenuto in [Day] : [0] [1] [2] [3] [4] [5] , il tutto dovrebbe avvenire in un ciclo.

:help::help:
 

vbs

Utente Attivo
652
267
Ciao,

Per iniziare a spiegarti come è la struttura di un array, pensa alle cartelle...

In pratica, nel tuo esempio (che sembra proprio la struttura di un percorso file), per estrarre un singolo valore da un indice dovresti "tradurla" in "percorso", ovvero per trovare un singolo valore, possiamo richiamarlo così:
$day1_num = $xml_array['Day']['1']['@attributes']['Num'];
...in pratica segui il "percorso" del valore

Provo a darti uno script funzionante di quello che penso stavi cercando... Ah, ovviamente non è stato testato per mancanza del tempo necessario per costruire l'oggetto xml...

PHP:
$xml_array = (array)$SimpleXmlObject; //trasformiamo l'oggetto xml in un array

// Mettiamo tutto in un ciclo

$days = count($xml_array['Day']); //abbiamo il numero totale di day (da 0 a 5 nel tuo caso)
$string = ''; // inizializziamo una stringa vuota, per ora...

for ($i=0; $i<$days; $i++){

  $day_num = $xml_array['Day'][$i]['@attributes']['Num'];

  $day_date = $xml_array['Day'][$i]['Date'];

// facciamo "esplodere" la data dal formato ggmmaa in una mini-array chiamata $ddate
  $t_date = preg_match('/([0-9]{2})([0-9]{2})([0-9]{2})/',$day_date,$ddate);

// l'array $ddate contiene il gg all'indice 1, mm al 2, aa al 3.
// di seguito formattiamo la data in modo giusto con l'apposita funzione (vedi php.net funzione date)
  $the_date = date("d-m-Y",mktime(0,0,0,$ddate[2],$ddate[1],$ddate[3]));

  $day_nrg = $xml_array['Day'][$i]['Energy'];

  $string .= 'Giorno '.$i.' -> Numero: '.$day_num.'; Data: '.$the_date.'; Energia: '.$day_nrg.'<br />';

}

// butta a schermo i risultati...
echo '
Variabili trasformate:<br /><br />
'.$string.'<br /><br />
---fine---
';
 

[>>VK<<]

Utente Attivo
108
0
Ciao,

Per iniziare a spiegarti come è la struttura di un array, pensa alle cartelle...

In pratica, nel tuo esempio (che sembra proprio la struttura di un percorso file), per estrarre un singolo valore da un indice dovresti "tradurla" in "percorso", ovvero per trovare un singolo valore, possiamo richiamarlo così:
$day1_num = $xml_array['Day']['1']['@attributes']['Num'];
...in pratica segui il "percorso" del valore

Provo a darti uno script funzionante di quello che penso stavi cercando... Ah, ovviamente non è stato testato per mancanza del tempo necessario per costruire l'oggetto xml...

PHP:
$xml_array = (array)$SimpleXmlObject; //trasformiamo l'oggetto xml in un array

// Mettiamo tutto in un ciclo

$days = count($xml_array['Day']); //abbiamo il numero totale di day (da 0 a 5 nel tuo caso)
$string = ''; // inizializziamo una stringa vuota, per ora...

for ($i=0; $i<$days; $i++){

  $day_num = $xml_array['Day'][$i]['@attributes']['Num'];

  $day_date = $xml_array['Day'][$i]['Date'];

// facciamo "esplodere" la data dal formato ggmmaa in una mini-array chiamata $ddate
  $t_date = preg_match('/([0-9]{2})([0-9]{2})([0-9]{2})/',$day_date,$ddate);

// l'array $ddate contiene il gg all'indice 1, mm al 2, aa al 3.
// di seguito formattiamo la data in modo giusto con l'apposita funzione (vedi php.net funzione date)
  $the_date = date("d-m-Y",mktime(0,0,0,$ddate[2],$ddate[1],$ddate[3]));

  $day_nrg = $xml_array['Day'][$i]['Energy'];

  $string .= 'Giorno '.$i.' -> Numero: '.$day_num.'; Data: '.$the_date.'; Energia: '.$day_nrg.'<br />';

}

// butta a schermo i risultati...
echo '
Variabili trasformate:<br /><br />
'.$string.'<br /><br />
---fine---
';

grazie per la dritta, ma probabilmente mi sono espresso male io, a me serviva estrarre i numeri 0,1,2,3 che indicano i sotto array...

P.S
In pratica devo andare a estrarre di volta in volta tutti i valori di Energia associati a un giorno e confrontarli, perchè XML che devo caricare in DB è fatto malissimo (non dipende da me) e molte volte per lo stesso giorno riporta erroneamente Energy=0, per evitare questo devo andare a confrontare tutti i valori attribuiti a un giorno e immettere il maggiore.

In un primo momento pensavo di fare questo controllo includendo nel foreach con il quale carico nel DB i dati un'altro FOR che si prendesse il compito di andare a esaminare il file facendo l'operazione che ti ho descritto prima.

Alla fine però mi sono accorto che mi stò arrovellando per niente, perchè grazie a xpath dovre poter fare una simil query sul file XML e farmi restituire tutti i valori legati a un giorno, per confrontarli prima dell'inserimento.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!