3

PHP で単純な XML 要素をソートする方法を知りたいです。はい、同じテーマのスレッドをいくつか見つけましたが、問題を解決できませんでした。

私がソートしたいXMLは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<cursos>
  <curso>
    <id>DRW</id>
    <nome>Design Responsivo</nome>
    <categoria>Web</categoria>
    <inicio>30/02/2013</inicio>
    <periodo>Sábados de manhã</periodo>
    <cargaHoraria>40h</cargaHoraria>
    <objetivos></objetivos>
  </curso>
  <curso>
    <id>MSQ</id>
    <nome>MySQL</nome>
    <categoria>Banco de dados</categoria>
    <inicio>30/03/2013</inicio>
    <periodo>Sábados de manhã</periodo>
    <cargaHoraria>20h</cargaHoraria>
    <objetivos></objetivos>
  </curso>
  <curso>
    <id>MBY</id>
    <nome>Iniciação à informática</nome>
    <categoria>Iniciantes e Usuários Av.</categoria>
    <inicio>30/04/2013</inicio>
    <periodo>Matutino 1</periodo>
    <cargaHoraria>80h</cargaHoraria>
    <objetivos></objetivos>
  </curso>
  <curso>
    <id>FCS</id>
    <nome>Desenvolvendo em C#</nome>
    <categoria>Desenvolvimento</categoria>
    <inicio>14/04/2013</inicio>
    <periodo>Domingo</periodo>
    <cargaHoraria>60h</cargaHoraria>
    <objetivos></objetivos>
  </curso>
  <curso>
    <id>MAY</id>
    <nome>Modelagem em Maya</nome>
    <categoria>Artes gráficas</categoria>
    <inicio>13/04/2013</inicio>
    <periodo>Sábado 08h:00-13h:00</periodo>
    <cargaHoraria>60h</cargaHoraria>
    <objetivos></objetivos>
  </curso>
</cursos>

これこの解決策を見つけましたが、これを多次元 XML 配列に適用するロジックは明確ではありません。誰かが私を助けることができますか?

前もって感謝します。

4

1 に答える 1

2

SimpleXML を使用して簡単にソートする方法はありません。要素を含む配列を作成し、並べ替えてから XML を再構築する必要があります。

$d = simplexml_load_string($xml);
// turn into array
$e = array();
foreach ($d->curso as $curso) {
        $e[] = $curso;
}
// sort the array
usort($e, function($a, $b) {
        return $a->cargaHoraria - $b->cargaHoraria;
});
// put it back together
echo '<cursos>';
foreach ($e as $node) {
        echo $node->saveXML();
}
echo '</cursos>';
于 2013-04-01T15:30:47.080 に答える