Как заказать цикл simpleXML - PullRequest
2 голосов
/ 20 января 2010

Мне нужно заказать цикл по идентификатору

мой XML-документ выглядит так

<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>  

Итак, как вы можете видеть, мне нужно упорядочить мою строку по этому идентификатору

мой код для вывода

<?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>';
}
?>

Надеюсь, это имеет смысл

Ответы [ 3 ]

1 голос
/ 20 января 2010
$array = array();
foreach ($xml->gig as $gig) {
   $id = (int)$gig->attributes()->id;
   $array[$id] = $gig;
}

Заказ по номеру: 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>';
}

Никогда не забывайте приводить SimpleXMLObjects к строкам (или целым числам ...).

0 голосов
/ 20 января 2010

Я часто вижу запросы на сортировку элементов XML, обычно основанные на результате запроса XPath.

Для этой цели я написал метод sortedXPath () для SimpleDOM . Он имеет ту же сигнатуру, что и array_multisort () , за исключением того, что первый аргумент является выражением XPath и вместо ключей массива использует выражения XPath. Например, вот как получить все элементы <gig/>, отсортированные по их атрибуту id:

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";
}
0 голосов
/ 20 января 2010

В xpath (стандартном) xpath нет опции упорядочения, но в xsl (t) есть, например,

...