2012-09-30 90 views
0

我試圖按字母順序對節點列表進行排序,然後在SimpleXML中回顯它們。我使用一個類似這裏引用的usort功能: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> 

正如你可以看到,他們不是按字母順序排列。我錯過了什麼嗎?任何幫助表示讚賞。

回答

3

從快速查看你的問題,它看起來像你正在使用usortSimpleXMLElement類型的對象。但是該函數旨在用於數組。

可能將對象(或更確切地說它提供的迭代器)轉換爲數組首先應解決您的問題。

說明:在這個例子中你聯繫,xpath功能用於其已經返回array,在這裏你的例子事實並非如此。

的函數把所提供的迭代器的陣列是iterator_to_array

$array = iterator_to_array($xQuery, false); 

usort($array, "cmp"); 

foreach ($array as $comic) ... 
+1

注:* $ use_keys *參數需要被設置到否則返回FALSE陣列只會有一個條目。我錯過了。 – hakre

+0

有道理。感謝澄清! – Batfan

+0

還有一件事,我在回覆數據以從前一節點和下一節點獲取一些數據之前正在使用xpath查詢。這工作正常,除了它似乎沒有拿起這個新的排序順序。你可以在這裏看到代碼http://db.tt/J1ZOLeKN有什麼想法? – Batfan