SimpleXML e ciclo FOR

archema

Nuovo Utente
29 Dic 2012
13
0
0
Salve a tutti.
Premessa: Ho un file XML postato su un'altro server che devo leggere e listare sul mio sito.
Questo file è costituito da molti articoli (250 per l'esattezza) ma a me ne bastano 5 da inserire sul mio sito.
Seguendo un breve tutorial sulla rete ho trovato un codice php che implementa l'uso del FOREACH, il quale mi lista tutto il contenuto dell'array ed è il seguente:

PHP:
<?

$leggimi = simplexml_load_file("news.xml");

$news = $leggimi->articolo;

foreach($news as $xmldati){

echo "Titolo : ".$xmldati->titolo."<br>";
echo "Data : ".$xmldati->data."<br>";
echo "Articolo : ".$xmldati->testo."<br>";
echo "<hr>";
}

?>

io ho provato in tutti i modi a implementare l'uso del ciclo FOR nel modo qui sotto, ma non funziona:


PHP:
<?
$dbi = simplexml_load_file("http://www.sito.com/news_for_your_site.xml");

$news = $dbi->articolo;

$i=0;

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

echo "Titolo : ".$news[$i][title]."<br>";
echo "Data : ".$news[$i][data]."<br>";
echo "Articolo : ".$news[$i][descrizione]."<br>";
echo "<hr>";

}

?>

non funziona ... inoltre ignoro il significato di questa porzione di codice: $news = $dbi->articolo; ma ho tentato di scriverla a partire dcall'esempio.

chiunque può aiutarmi sarà ringraziato da subito.

Saluti
Archema
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
forse potresti trasformare prima l'object risultante in array e poi stampare l'array

PHP:
<?php
$leggimi = simplexml_load_file("news.xml");
$news = $leggimi->articolo;
foreach($news as $xmldati){
	$titolo[]=$xmldati->titolo;
	$data[]=$xmldati->data;
	$articolo[]=$xmldati->testo;
}
for($k=0;$k <5;$k++){
	echo "titolo: ".$titolo[$k]."<br />";
	echo "data: ".$data[$k]."<br />";
	echo "articolo: ".$articolo[$k]."<br />";
}
?>
al massimo non funzia

poi sei sicuro della struttura del file xml? se no prova questo mini script
PHP:
<?php
$leggimi = simplexml_load_file("news.xml");
print_r($leggimi);
?>
dovrebbe stampartela

p.s.
non usare lo short tag <? ma <?php
 

archema

Nuovo Utente
29 Dic 2012
13
0
0
Lo avevo capito da me che qui c'è gente in gamba...

Il primo script funziona a meraviglia....


Grazie... grazie ancora! :fonzie::fonzie::fonzie:

PS:

Dopo aver fatto la connessione all'XML con
PHP:
$leggimi = simplexml_load_file("news.xml");
... la variabile $leggimi posso considerarla a tutti gli effetti un Array?

Lo chiedo perchè vorrei applicare degli SORT by DATA, o degli sort by RATING.
Infatti nel file XML ci sono dei tag: DATA, RATING e CATEGORY... con i quali vorrei poter ordinare il contenuto del file XML.


Grazie ancora per la pronta risposta.

Saluti
Archema
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Lo avevo capito da me che qui c'è gente in gamba...
Dopo aver fatto la connessione all'XML con
PHP:
$leggimi = simplexml_load_file("news.xml");
... la variabile $leggimi posso considerarla a tutti gli effetti un Array?
$leggimi diventa un oggetto con degli attributi che sono degli array, quindi come ti ha mostrato borgo facendo ad esempio cosi
PHP:
$news = $leggimi->articolo;
$news diventa a tutti gli effetti un array (che a sua volta puo avere degli oggetti con altri array) ma $leggimi rimane un oggetto
 

archema

Nuovo Utente
29 Dic 2012
13
0
0
$leggimi diventa un oggetto con degli attributi che sono degli array, quindi come ti ha mostrato borgo facendo ad esempio cosi
PHP:
$news = $leggimi->articolo; 
[:byebye:/php]
$news diventa a tutti gli effetti un array (che a sua volta puo avere degli oggetti con altri array) ma $leggimi rimane un oggetto[/QUOTE]

grazie mille, ho compreso.

buon fine settimana a tutti!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ciao
propongo un alternativa:
incrementi una variabile e la usi per fermare il ciclo while
PHP:
<?php
$leggimi = simplexml_load_file("news.xml");
$news = $leggimi->articolo;

$i = 0; // inizializzi il contatore
foreach ($news as $xmldati) {
    $i++; // lo incrementi
    echo "Titolo : " . $xmldati->titolo . "<br>";
    echo "Data : " . $xmldati->data . "<br>";
    echo "Articolo : " . $xmldati->testo . "<br>";
    echo "<hr>";
    if ($i == 5) {
        break; // fermi il ciclo
    }
}
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Correggo una mia affermazione fatta prima dato che mi ricordavo male, $news diventa in questo caso un'istanza del primo oggetto passato non un array effettivo e cosi anche con gli altri, in pratica totalmente un array non dovrebbe mai diventarlo almeno se non utilizzando una conversione implicita fatta dall'utente

Colgo l'occasione per mostrare un esempio e un eventuale alternativa
PHP:
<?php
$leggimi = simplexml_load_file("news.xml");
$news = json_decode(json_encode($leggimi),true);

foreach (array_values($news['articolo']) as $key => $xmldati) {
    echo "Titolo : " . $xmldati['titolo'] . "<br>";
    echo "Data : " . $xmldati['data'] . "<br>";
    echo "Articolo : " . $xmldati['testo'] . "<br>";
    echo "<hr>";
    if($key==4) break; //volendo stampare 5 articoli, dato che le chiavi partono da 0 si ferma a 4
}
 
Ultima modifica:

archema

Nuovo Utente
29 Dic 2012
13
0
0
ciao
propongo un alternativa:
incrementi una variabile e la usi per fermare il ciclo while
PHP:
<?php
$leggimi = simplexml_load_file("news.xml");
$news = $leggimi->articolo;

$i = 0; // inizializzi il contatore
foreach ($news as $xmldati) {
    $i++; // lo incrementi
    echo "Titolo : " . $xmldati->titolo . "<br>";
    echo "Data : " . $xmldati->data . "<br>";
    echo "Articolo : " . $xmldati->testo . "<br>";
    echo "<hr>";
    if ($i == 5) {
        break; // fermi il ciclo
    }
}

che dire... il codice funziona a meraviglia ed é pure pulito e semplice all'aspetto.

volendo riallacirmi all'ultimo messaggio di Nefyt purtroppo é vero, non viene restituito un array, quindi non posso usare una funzione di array sort ne su $leggimi ne su $news.
avete qualche idea per trasformare $news da un oggetto ad un array multidimensionale?

ho trovato qualche funzione in giro, ma non funge! appena posso le posto...

grazie.

Archema
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
L'esempio che ti ho mostrato lo trasforma già in un array multidimensionale, puoi verificarlo anche tramite var_dump o ciclo
 
Discussioni simili
Autore Titolo Forum Risposte Data
S SimpleXML - Inserire DTD e intestazione PHP 3
otto9due Accesso agli elementi <![CDATA[ ... ]]> di un file XML con SimpleXML e PHP PHP 2
M simplexml PHP 1
alessandro1997 [SimpleXML] Problema rimozione nodo PHP 0
A Aiuto - SimpleXML PHP 4
J [XML simplexml] Problemi con caratteri accentati PHP 2
S SimpleXML - Come stampare gli indici? PHP 2
B Completare il seguente ciclo affinché stampi tutto l’array al contrario PHP 3
W MySQL ciclo in SELECT MySQL 0
E Inviare variabile a PHP da ciclo in JS Javascript 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
W fare la somma di un valore estratto da un ciclo while Classic ASP 0
motleyrulez Aiuto con un ciclo PHP 0
B [PHP] formula e ciclo PHP 5
M [PHP] Come inserire codice html in un ciclo while PHP 2
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
G [PHP] totale per ogni id di un ciclo PHP 1
P Incrementare nodo in ciclo for-each XML 6
S [PHP] Ciclo foreach su più array PHP 2
M UPDATE non aggiorna db se lo inserisco in un ciclo Database 1
N [PHP] Controllare condizione ciclo While PHP 9
maxnegri [PHP] Eliminare risultati duplicati da ciclo foreach ottenuti da una select php mysqli PHP 18
N [PHP] Registrare variabili all'interno di un ciclo PHP 3
MattiaBL [PHP] Problema ciclo while PHP 3
V Ciclo for per Pulsante in JavaScript Javascript 7
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
C [PHP] Ciclo for dinamico PHP 14
gandalf1959 [PHP] query all'interno di un ciclo while PHP 3
Z [PHP] ciclo for PHP 9
valvasori [PHP] Problema ciclo for PHP 12
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
H [PHP] Ciclo per calcolare i chilometri PHP 4
S [PHP] Recupero più dati da form realizzata ciclo FOR PHP 5
gandalf1959 [PHP] ciclo while non scrive dove dovrebbe... PHP 2
Monital [PHP] ciclo su un file json molto grande PHP 1
M [PHP] Errore in ciclo foreach PHP 1
O Ciclo non visualizzato PHP 1
M problema ciclo javascript Javascript 4
G Ciclo if php per far comparire un pulsante solo nel caso in cui una variabile sia 0 PHP 2
F Problema codice in un ciclo while PHP 2
T ciclo $.each non va jQuery 4
V Generare array da ciclo while e prendere valori casuali PHP 4
I tabella con ciclo, recupero dati PHP 3
Monital Problema con un ciclo for. PHP 1
M Problema con ciclo foreach per chiusura apertura div in base al numero di record in database PHP 1
S Ciclo PHP molto complesso PHP 2
minatore Ciclo while PHP 3
D ciclo while mi genera due campi vuoti PHP 5
K Problema con update di un database in un ciclo Classic ASP 1
P JAVA 8 Ciclo For all'interno di un altro Ciclo For Java 3

Discussioni simili