我试图按字母顺序对节点列表进行排序,然后在SimpleXML中回显它们。我正在使用类似于此处引用的 usort 函数:
Sorting Results returned by SimpleXML, and Xpath in PHP
这是我的代码:
$xQuery = $xml->comiclist->comic;
function cmp ($a, $b) {
return strcmp(
$a->mainsection->series->sortname,
$b->mainsection->series->sortname
);
}
usort($xQuery, "cmp");
foreach ($xQuery as $comic) :
问题是它似乎只是部分正在工作。大多数项目都正确组合在一起,但有些项目完全不合适。从函数中可以看出,每个$ comic节点都按其子节点“mainsection-> series-> sortname”进行排序。
以下是它产生的一些顺序的示例:
<sortname>New Avengers: Illuminati, Vol. 2</sortname>
<sortname>New Avengers: Illuminati, Vol. 2</sortname>
<sortname>Nova</sortname>
<sortname>New X-Men</sortname>
<sortname>Nation X</sortname>
<sortname>Namor, The Sub-Mariner Annual</sortname>
如您所见,它们不是按字母顺序排列的。我错过了什么吗?任何帮助表示赞赏。
答案 0 :(得分:3)
通过快速查看您的问题,您可能会在SimpleXMLElement
类型的对象上使用usort
。但是,该函数旨在用于数组。
可能首先将对象(或者更确切地说是它提供的迭代器)转换为数组应解决您的问题。
说明:在您链接的示例中,使用的
xpath
函数已经返回array
,在您的示例中并非如此。
将提供的迭代器转换为数组的函数是iterator_to_array
:
$array = iterator_to_array($xQuery, false);
usort($array, "cmp");
foreach ($array as $comic) ...