Nasıl bir dizi içindeki bir nesneyi sıralayabilirim?

2 Cevap php

Ben araştırdım ve benim için işe yaramadı bu sitede birkaç çözümü bulduk. Benim durumumda ben XML bir XPath arama (işlevini içeren) gerçekleştirmek olduğunu ve sonuçlarını listeler. Ben alfabetik listelenen sonuç istiyorum. Sonuçları bir dizide döşeme, ve bu gibi görünüyor vardır:

Array
(
    [0] => SimpleXMLElement Object
        (
            [DISID] => 2160364
            [StopName] => Nationtheatret
        )

    [1] => SimpleXMLElement Object
        (
            [DISID] => 1118735
            [StopName] => Huldrefaret
        )

    [2] => SimpleXMLElement Object
        (
            [DISID] => 2200752
            [StopName] => Jernbanetorget
        )
)

Bu gibi verileri listeleme:

$xml = new SimpleXMLElement(file_get_contents("StopPointList.xml"));

$query = strtolower($_GET["q"]);

$upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ";
$lower = "abcdefghijklmnopqrstuvwxyzæøå";

$result = $xml->xpath("//StopPoint[contains(translate(StopName, '$upper', '$lower'), '$query')]");

foreach ($result as $stop)
{
    echo '<li><a href="stops.php?id='.$stop->DISID.'">'."\n";
    echo "\t".'<span class="name">'.$stop->StopName.'</span>'."\n";
    echo "\t".'<span class="arrow"></span>'."\n";
    echo '</a></li>'."\n";
}

Nasıl (ve burada) Ben alfabetik listelenecek sonuçları sıralayabilirsiniz?

2 Cevap

Nesneleri sıralamak için, bir karşılaştırma işlevi gerekir. Örneğin, karşılaştırmak için StopName, bu gibi bir şey kullanabilirsiniz:

function cmp ($a, $b)
{
    return strcmp($a->StopName, $b->StopName);
}

Sonra, XPath sorgu sonrasında ve öncesinde foreach, gerçek sıralama yapmak için bu satırı ekleyin:

usort($result, "cmp");

Eğer, başka bir veri yapısı içine sıralama bu yapıyı veri kopyalamak gerekir, ve sonra çıkış o olacak foreach döngü gibi görünüyor. These functions may help