的基本程序是
- 投下
SimpleXMLElement
到一個數組
- 寫接受兩個
SimpleXMLElement
參數
- 使用
usort()
比較功能的數組排序比較功能
我只能猜測你的原始XML結構,但我認爲它看起來像這樣:
$xml = <<<EOT
<root>
<text>
<body>
<div>
<bibl>
<author>A</author>
<title>A</title>
<date>1</date>
</bibl>
</div>
<div>
<bibl>
<author>B</author>
<title>B</title>
<date>2</date>
</bibl>
</div>
<div>
<bibl>
<author>D</author>
<title>D</title>
<date>4</date>
</bibl>
</div>
<div>
<bibl>
<author>C</author>
<title>C</title>
<date>3</date>
</bibl>
</div>
</body>
</text>
</root>
EOT;
$xmldoc = new SimpleXMLElement($xml);
第1步:投射到數組。請注意,你的$divArray
實際上並不是一個數組!
$divSXE = $xmldoc->text->body->children(); // is a SimpleXMLElement, not an array!
// print_r($divSXE);
$divArray = array();
foreach($divSXE->div as $d) {
$divArray[] = $d;
}
// print_r($divArray);
第2步:寫一個比較函數。由於數組是SimpleXMLElement
s的列表,所以比較函數必須接受SimpleXMLElement
參數。 SimpleXMLElement
s需要顯式轉換才能獲得字符串或整數值。
function author_cmp($a, $b) {
$va = (string) $a->bibl->author;
$vb = (string) $b->bibl->author;
if ($va===$vb) {
return 0;
}
return ($va<$vb) ? -1 : 1;
}
步驟3:排序與usort()
usort($divArray, 'author_cmp');
print_r($divArray);
使用陣列'usort' http://stackoverflow.com/questions/8076506/using-usort-with-simplexml – prodigitalson
[PHP的可能重複排序問題與simpleXML](http://stackoverflow.com/questions/3023029/php-sorting-issue-with-simplexml) – hakre