Как отсортировать объект в массиве? - PullRequest
1 голос
/ 09 марта 2009

Я искал и нашел пару решений на этом сайте, которые мне не помогли. В моем случае я выполняю поиск XPath (содержит функцию) в XML и перечисляет результаты. Я хочу, чтобы эти результаты были перечислены в алфавитном порядке. Результаты лежат в массиве, и выглядит так:

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 ]

4 голосов
/ 09 марта 2009

Для сортировки объектов вам понадобится функция сравнения. Например, чтобы сравнить по StopName, используйте что-то вроде этого:

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

Затем, после запроса xpath и перед foreach, добавьте эту строку, чтобы выполнить фактическую сортировку:

usort($result, "cmp");
4 голосов
/ 09 марта 2009

Похоже, что в цикле foreach вам нужно будет скопировать данные в другую структуру данных, отсортировать эту структуру и затем вывести ее. Эти функции могут помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...