如何对数组中的对象进行排序?

时间:2009-03-09 14:44:26

标签: php object sorting

我在这个网站上搜索并找到了几个解决方案,这对我不起作用。我的情况是我在XML中执行XPath搜索(包含函数),并列出结果。我希望按字母顺序列出这些结果。结果放在一个数组中,如下所示:

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

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

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

我列出的数据如下:

$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";
}

如何(以及在​​何处)我可以按字母顺序对结果进行排序?

2 个答案:

答案 0 :(得分:4)

在foreach循环中,您需要将数据复制到另一个数据结构中,对该结构进行排序,然后输出。 These functions may help

答案 1 :(得分:4)

为了对对象进行排序,您需要一个比较功能。例如,要按StopName进行比较,请使用以下内容:

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

然后,在xpath查询之后和foreach之前,添加此行以进行实际排序:

usort($result, "cmp");