У меня есть куча данных, хранящихся в файле XML, которые я распечатываю в виде списка с помощью PHP. Я хочу, чтобы пользователь мог выбрать способ сортировки списка.
Я немного поэкспериментировал с usort()
, но, похоже, он не работает. Это не исключение, поэтому я думаю, что это выполнимо, но с моей функцией сортировки что-то не так. Первое, что я хочу сделать, - это отсортировать данные по дате их создания - они хранятся в таком атрибуте, как этот:
<root>
<info created="2011-12-31">
<sometags />
</info>
<info created="2012-01-02">
<sometags />
</info>
<info created="2012-01-01">
<sometags />
</info>
</root>
и моя сортировка сделана так:
function sortByDate($a, $b) {
//get array of year, month and day
$adates = explode('-', $a->getAttribute('created'));
$bdates = explode('-', $b->getAttribute('created'));
//if the years are not the same, use them to sort
if ($adates[0] != $bdates[0]) {
return (intval($adates[0]) < intval($bdates[0])) ? -1 : 1;
}
//if the years are the same, try sorting by the months
else if ($adates[1] != $bdates[1]) {
return (intval($adates[1]) < intval($bdates[1])) ? -1 : 1;
}
//if the years and months are both the same, try sorting by days
else {
return (intval($adates[2]) < intval($bdates[2])) ? -1 : 1;
}
//if we get this far, the dates are identical
return 0;
}
и вот как я это называю:
$xmlDoc = new DOMDocument();
$xmlDoc->load('data.xml');
$infotags = $xmlDoc->documentElement->getElementsByTagName('info');
usort($infotags, 'sortByDate');
Это какая-то глупая ошибка, которую я сделал, или я должен делать что-то еще полностью?
Кстати, я знаю, что приведенная выше конструкция if... else
на самом деле не будет сортировать даты в правильном порядке. Я просто пытаюсь заставить его сделать что-то - в данный момент usort()
просто оставляет список узлов в том же порядке, в котором он был начат.