我有一个xml文件加载simplexml,我需要按价格或作者或标题对字段进行排序.我该怎么办?使用xpath还是其他方式可以吗?我在这里看到了类似的例子,但我还不是很清楚
<?xml version="1.0" encoding="UTF-8"?>
<root>
<libro>
<autor><![CDATA[Cervantes]]></autor>
<titulo><![CDATA[El Quijote]]></titulo>
<precio>30€</precio>
</libro>
<libro>
<autor><![CDATA[Calderón de la Barca]]></autor>
<titulo><![CDATA[La vida es sueño]]></titulo>
<precio>25€</precio>
</libro>
<libro>
<autor><![CDATA[Garcilaso de la vega]]></autor>
<titulo><![CDATA[Egoglas]]></titulo>
<precio>15€</precio>
</libro>
<libro>
<autor><![CDATA[Raymond Carver]]></autor>
<titulo><![CDATA[Catedral]]></titulo>
<precio>16€</precio>
</libro>
<libro>
<autor><![CDATA[George Orwell]]></autor>
<titulo><![CDATA[1984]]></titulo>
<precio>10€</precio>
</libro>
<libro>
<autor><![CDATA[Fidor Dostoyevski]]></autor>
<titulo><![CDATA[Crimen y Castigo]]></titulo>
<precio>35€</precio>
</libro>
<libro>
<autor><![CDATA[Juan Ponce]]></autor>
<titulo><![CDATA[Cronica de la intervencion]]></titulo>
<precio>25€</precio>
</libro>
<libro>
<autor><![CDATA[Yukio Mishima]]></autor>
<titulo><![CDATA[Confesiones de una mascara]]></titulo>
<precio>22€</precio>
</libro>
<libro>
<autor><![CDATA[Elfriede Jelinek]]></autor>
<titulo><![CDATA[DeSEO]]></titulo>
<precio>20€</precio>
</libro>
<libro>
<autor><![CDATA[Bram Stoker]]></autor>
<titulo><![CDATA[Dracula]]></titulo>
<precio>18€</precio>
</libro>
</root>
$xml = simplexml_load_file('xml/libros.xml');
$sum = 0;
$h = "<table>";
$h .= "<tr>";
$h .= "<td><a href='#' id='ordAut'><img src='img/up_down.png' /></a></td><td><a href='#' id='ordTit'><img src='img/up_down.png' /></a></td><td><a href='#' id='ordPre'><img src='img/up_down.png' /></a></td>";
$h .= "</tr>";
foreach ($xml->libro as $book) {
$h .= "<tr>";
$h .= "<td>".$book->autor."</td><td>".$book->titulo."</td><td>".$book->precio."</td>";
$h .= "</tr>";
$sum += $book->precio;
}
$h .= "<tr><td colspan=\"2\">sum:</td><td>$sum</td></tr></table>";
echo $h;
解决方法:
像这样排序你的simplexml:
函数sort_obj_arrwritten由GZipp于this post编写
$xml = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);
$books = $xml->xpath("//libro");
echo "<pre>";
print_r($books);
echo "</pre>";
$field = 'precio';
sort_obj_arr($books,$field,SORT_DESC);
echo "<pre>";
print_r($books);
echo "</pre>";
function sort_obj_arr(& $arr, $sort_field, $sort_direction)
{
$sort_func = function($obj_1, $obj_2) use ($sort_field, $sort_direction)
{
if ($sort_direction == SORT_ASC) {
return strnatcasecmp($obj_1->$sort_field, $obj_2->$sort_field);
} else {
return strnatcasecmp($obj_2->$sort_field, $obj_1->$sort_field);
}
};
usort($arr, $sort_func);
}
现场演示@ http://codepad.viper-7.com/QvLqIq
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。