0

我正在尝试按字母顺序对节点列表进行排序,然后在 SimpleXML 中回显它们。我正在使用与此处引用的类似的usort函数:

对 SimpleXML 和 PHP 中的 Xpath 返回的结果进行排序

这是我的代码:

$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>

如您所见,它们不是按字母顺序排列的。我错过了什么吗?任何帮助表示赞赏。

4

1 回答 1

3

从快速查看您的问题来看,您似乎正在使用usorttype 的对象SimpleXMLElement。但是,该函数旨在用于数组。

可能首先将对象(或更准确地说是它提供的迭代器)转换为数组应该可以解决您的问题。

说明:在您链接的示例中,xpath使用了已经返回 a 的函数array,在您的示例中并非如此。

将提供的迭代器转换为数组的函数是iterator_to_array

$array = iterator_to_array($xQuery, false);

usort($array, "cmp");

foreach ($array as $comic) ...
于 2012-09-30T18:43:39.863 回答