1

下面是我的 XML 文件

<?xml version="1.0"?>
<calender>

<task>
<date>00/00/0000</date>
<title>My Birthday</title>
<description>Today is my birthday!</description>
</task>

<task>
<date>04/08/2013</date>
<title>test</title>
<description>swdefswde</description>
</task>

<task>
<date>04/02/2013</date>
<title>test</title>
<description>test</description>
</task>

<task>
<date>04/01/2013</date>
<title>egfwe</title>
<description>wefwef</description>
</task>

<task>
<date>04/03/2013</date>
<title>ssdv</title>
<description>ssdvs</description>
</task>

</calender>

我正在尝试将它们添加到数组中,并按日期对元素进行排序[然后用排序后的 xml 重写 xml 文件]。有人可以帮帮我吗?

我已经厌倦了以下代码但不起作用[甚至无法将它们添加到数组中]

$xml_temp = array();
foreach ($xml_add->task as $aTask) {
    $xml_temp[] = $aTask;
    }

    print_r ($xml_temp);
4

2 回答 2

3

你的数组很好。接下来你需要的是usort

$xml=simplexml_load_string(<<<XML
<?xml version="1.0"?>
<calender>

<task>
<date>00/00/0000</date>
<title>My Birthday</title>
<description>Today is my birthday!</description>
</task>

<task>
<date>04/08/2013</date>
<title>test</title>
<description>swdefswde</description>
</task>

<task>
<date>04/02/2013</date>
<title>test</title>
<description>test</description>
</task>

<task>
<date>04/01/2013</date>
<title>egfwe</title>
<description>wefwef</description>
</task>

<task>
<date>04/03/2013</date>
<title>ssdv</title>
<description>ssdvs</description>
</task>

</calender>
XML
);
$arr=array();
foreach($xml->task as $aTask)
{
    $arr[]=$aTask;
}
//print_r($arr);
/* uncomment the above line to debug */
usort($arr,function($a,$b){
    return strtotime($a->date)-strtotime($b->date);
});
//print_r($arr);
/* uncomment the above line to debug */
$xml=simplexml_load_string(<<<XML
<?xml version="1.0"?>
<calender>
</calender>
XML
);
foreach($arr as $aTask)
{
    $tTask=$xml->addChild($aTask->getName());
    $tTask->addChild($aTask->date->getName(),(string)$aTask->date);
    $tTask->addChild($aTask->title->getName(),(string)$aTask->title);
    $tTask->addChild($aTask->description->getName(),(string)$aTask->description);
}
echo $xml->asXML();

回显的 XML(手动格式化以使其看起来更好):

<?xml version="1.0"?>
<calender>

<task>
<date>00/00/0000</date>
<title>My Birthday</title>
<description>Today is my birthday!</description>
</task>

<task>
<date>04/01/2013</date>
<title>egfwe</title>
<description>wefwef</description>
</task>

<task>
<date>04/02/2013</date>
<title>test</title>
<description>test</description>
</task>

<task>
<date>04/03/2013</date>
<title>ssdv</title>
<description>ssdvs</description>
</task>

<task>
<date>04/08/2013</date>
<title>test</title>
<description>swdefswde</description>
</task>

</calender>

需要 PHP >= 5.3

Live demo

于 2013-04-09T04:01:22.537 回答
0

您在这里有多个问题:

  1. 您想要对 SimpleXMLElements 列表进行排序。一个参考问题是:
  2. 您需要将元素添加到默认情况下不支持的 SimpleXMLElement 中。这在以下内容中得到了广泛的概述:

此外,关于如何搜索 SimpleXMLElements 列表的问题可以进一步细分,因此您的具体问题不清楚。从您的问题来看,您似乎已经了解需要将 SimpleXMLElements 列表转换为数组。

因此,您可能也在寻找如何对多维数组进行排序的参考问题:

如您所见,您的问题有很多方面,很难回答。如果您提出具体的编程问题而不是完整的脚本,Stackoverflow 会更好地工作;)

于 2013-04-09T09:53:14.033 回答