0

xmlファイルにsimplexmlをロードしましたが、フィールドを価格、または作成者またはタイトルで並べ替える必要があります。どうすればいいですか?xpathまたは別の方法を使用して大丈夫ですか?私はここで同様の例を見ましたが、私はあまり明確ではありません

XML

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <libro>
        <autor><![CDATA[Cervantes]]></autor>
        <titulo><![CDATA[El Quijote]]></titulo>
        <precio>30€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Calderón de la Barca]]></autor>
        <titulo><![CDATA[La vida es sueño]]></titulo>
        <precio>25€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Garcilaso de la vega]]></autor>
        <titulo><![CDATA[Egoglas]]></titulo>
        <precio>15€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Raymond Carver]]></autor>
        <titulo><![CDATA[Catedral]]></titulo>
        <precio>16€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[George Orwell]]></autor>
        <titulo><![CDATA[1984]]></titulo>
        <precio>10€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Fidor Dostoyevski]]></autor>
        <titulo><![CDATA[Crimen y Castigo]]></titulo>
        <precio>35€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Juan Ponce]]></autor>
        <titulo><![CDATA[Cronica de la intervencion]]></titulo>
        <precio>25€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Yukio Mishima]]></autor>
        <titulo><![CDATA[Confesiones de una mascara]]></titulo>
        <precio>22€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Elfriede Jelinek]]></autor>
        <titulo><![CDATA[Deseo]]></titulo>
        <precio>20€&lt;/precio>
    </libro>
    <libro>
        <autor><![CDATA[Bram Stoker]]></autor>
        <titulo><![CDATA[Dracula]]></titulo>
        <precio>18€&lt;/precio>
    </libro>
</root>

PHP

$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;
4

2 に答える 2

0

最初はばかげているように聞こえますが、データを配列にマッピングし、カスタム配列コールバックを使用して、正しくusort 実行したい場合は、パジネーターと呼ばれるものを開発します。これにより、表示される結果が制限されます。ページとカスタムフィルターを使用できます。

于 2013-03-24T22:07:35.303 に答える
0

simplexmlを次のように並べ替えます。

この投稿でGZippによってsort_obj_arr書かれた関数

$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

于 2013-03-25T21:53:24.713 に答える