我有一堆数据存储在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()
只是按照开始时的顺序离开节点列表。
答案 0 :(得分:0)
getElementsByTagName
返回一个DOMNodeList,它是一个迭代器,而不是一个真正的数组。因此,您无法更改列表的顺序。
首先尝试将其转换为数组。