Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用简单的XML和xpath对表字段进行排序_Php_Xml_Xpath - Fatal编程技术网

Php 使用简单的XML和xpath对表字段进行排序

Php 使用简单的XML和xpath对表字段进行排序,php,xml,xpath,Php,Xml,Xpath,我有一个加载了simplexml的xml文件,我需要按价格、作者或标题对字段进行排序。我怎么办?可以使用xpath或其他方式进行操作吗?我在这里看到了一个类似的例子,但我不是很清楚 XML "; $h.=”; foreach($xml->libro作为$book){ $h.=”; $h.=“..$book->autor.”“$book->titulo.”“$book->precio.”; $h.=”; $sum+=$book->precio; } $h.=“总和:$sum”; echo$h;

我有一个加载了simplexml的xml文件,我需要按价格、作者或标题对字段进行排序。我怎么办?可以使用xpath或其他方式进行操作吗?我在这里看到了一个类似的例子,但我不是很清楚

XML


";
$h.=”;
foreach($xml->libro作为$book){
$h.=”;
$h.=“..$book->autor.”“$book->titulo.”“$book->precio.”;
$h.=”;
$sum+=$book->precio;
}
$h.=“总和:$sum”;
echo$h;

我知道一开始听起来很愚蠢:但是映射数组中的数据,并使用自定义数组回调来调用
usort

如果您想正确地执行此操作,您将开发一种称为paginator的工具,它负责限制页面上显示的结果,并允许您使用自定义筛选器。

对simplexml进行如下排序:

函数
sort\u obj\u arr
由in编写

$xml=simplexml\u load\u字符串($xmlstr,'simplexmlement',LIBXML\u NOCDATA);
$books=$xml->xpath(“//libro”);
回声“;
印刷(书籍);
回声“;
$field='precio';
sort_obj_arr($books,$field,sort_DESC);
回声“;
印刷(书籍);
回声“;
函数sort_obj_arr(&$arr,$sort_字段,$sort_方向)
{
$sort\u func=函数($obj\u 1,$obj\u 2)使用($sort\u字段,$sort\u方向)
{
如果($sort\u direction==sort\u ASC){
返回strnatcasecmp($obj_1->$sort_字段,$obj_2->$sort_字段);
}否则{
返回strnatcasecmp($obj_2->$sort_字段,$obj_1->$sort_字段);
}
};
usort($arr,$sort_func);
}

Live demo@

看这个-接受的答案应该会起作用!@michi,我会试试这个好的,如果你需要帮助,就更新你的问题。jal,我收到你的评论,说你更新了你的问题,但它链接到一个页面,上面写着:问题已被作者删除?@michi,很抱歉我犯了一个错误。我用usort写的,但我有专业版瑕疵
<?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;
$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);
}