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上对SimpleXMLElement排序_Php_Xml_Sorting - Fatal编程技术网

如何在PHP上对SimpleXMLElement排序

如何在PHP上对SimpleXMLElement排序,php,xml,sorting,Php,Xml,Sorting,我想知道如何使用PHP对简单的XML元素进行排序。是的,我发现了一些关于同一主题的线程——但我无法解决我的问题 我要排序的XML是: <?xml version="1.0" encoding="UTF-8"?> <cursos> <curso> <id>DRW</id> <nome>Design Responsivo</nome> <categoria>Web</ca

我想知道如何使用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>

DRW
设计响应
网状物
30/02/2013
萨巴多斯德曼朗
40小时
MSQ
MySQL
达多斯银行
30/03/2013
萨巴多斯德曼朗
20小时
MBY
伊尼西亚·萨昂·阿莫蒂卡
伊尼西亚人和乌苏里奥斯人。
30/04/2013
马图蒂诺1号
80小时
未来作战系统
Desenvolvendo em C#
德森沃尔维门托
14/04/2013
多明戈
60小时
也许
Modelagem-Maya
格拉菲卡斯美术馆
13/04/2013
萨巴多08h:00-13h:00
60小时
我找到了解决方案,但将其应用于多维XML数组的逻辑对我来说并不清楚。有人能帮我吗


提前感谢。

使用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>';
$d=simplexml\u load\u字符串($xml);
//化成阵列
$e=数组();
foreach($d->curso作为$curso){
$e[]=$curso;
}
//对数组进行排序
usort($e,函数($a,$b){
返回$a->cargaHoraria-$b->cargaHoraria;
});
//把它放回原处
回声';
foreach($e作为$node){
echo$node->saveXML();
}
回声';

请发布您尝试使用的代码以及错误/问题。+1尽管我建议不要将其作为字符串重新组合。这样更好: