2010-01-20 5 views
2

Je neeed commander ma boucle par l'idComment commander boucle simpleXML

mon doc xml ressemble à ceci

<gig id="16"> 
     <date>Fri. 23rd Apr</date> 
     <venue>Sneaky Pete's</venue> 
     <area>Edinburgh</area> 
     <telephone>www.ticketweb.co.uk</telephone> 
     <price>£10</price> 
     <time>Time TBA</time> 
    </gig> 

Comme vous pouvez le voir, je dois commander ma chaîne par cet ID

mon code pour la sortie est

<?php 
foreach ($xml->gig as $dateof){ 
echo '<tr><td><img src="images/arrow.jpg" /></td><td width="200px" class="loop-Date">' . $dateof->date . '</td><td width="700px">' . $dateof->venue . '</td></tr>'; 
} 
?> 

Hope this sens

Répondre

1
$array = array(); 
foreach ($xml->gig as $gig) { 
    $id = (int)$gig->attributes()->id; 
    $array[$id] = $gig; 
} 

Trier par ID: ksort($array);

foreach ($array as $id => $gig) { 
    echo '<tr><td><img src="images/arrow.jpg" /></td><td width="200px" class="loop-Date">' . (string)$gig->date . '</td><td width="700px">' . (string)$gig->venue . '</td></tr>'; 
} 

Ne jamais oublier de jeter les SimpleXMLObjects à cordes (ou Entiers, ...).

+0

Vous étiez plus vite que moi :) BTW: Dans la deuxième ligne du deuxième bloc, vous devez remplacer '' dateof' $ en $ gig'. – Veger

+0

Merci à Veger pour ça. Merci r3zn1k pour votre aide :-) –

+0

Je ne peux pas sembler le faire fonctionner juste affichage vierge de, aucune erreur est juste semble que ce soit de ne pas obtenir les valeurs ????? –

0

Je vois souvent des demandes de tri des éléments XML, généralement en fonction du résultat d'une requête XPath.

A cette fin, j'ai écrit une méthode, sortedXPath(), pour SimpleDOM. Il a la même signature que array_multisort() sauf que le premier argument est une expression XPath et au lieu d'utiliser les clés du tableau, il utilise des expressions XPath. Par exemple, voici comment récupérer tous les éléments <gig/>, triées par leur id attribut:

include 'SimpleDOM.php'; 

$gigs = simpledom_load_string(
    '<gigs> 
     <gig id="16"> 
      <date>Fri. 23rd Apr</date> 
     </gig> 
     <gig id="15"> 
      <date>Fri. 16th Apr</date> 
     </gig> 
    </gigs>' 
); 

foreach ($gigs->sortedXPath('//gig', '@id') as $gig) 
{ 
    echo 'gig id ', $gig['id'], ' - date: ', $gig->date, "\n"; 
}