[英]sort xml div by child node PHP SimpleXML
所以我在xml文件中有一個<div>
的列表。 我正在使用php的simpleXML解析文件
我可以使用以下命令生成所有div的數組:
$divArray = $xmldoc->text->body->children();
但是現在我想通過div中的不同childNode(作者,標題,日期)對$ divArray進行排序。
div看起來像這樣。
<div>
<bibl>
<author>
<title>
<date>
</bibl>
</div>
那么,如何獲取$ divArray並按<author>
或<title>
或<date>
對其進行排序?
謝謝你的幫助。 JW
基本程序是
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
的列表,因此比較函數必須接受SimpleXMLElement
參數。 SimpleXMLElement
需要顯式轉換以獲取字符串或整數值。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.