按日期排序PHP XML元素 [英] PHP Sort XML Elements by Date

查看:240
本文介绍了按日期排序PHP XML元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的XML文件

 <?XML版本=1.0&GT?;
<&压延GT;<任务>
<日期和GT; 00/00/0000 LT; /日期和GT;
<标题>我的生日< /标题>
<描述>今天是我的生日<!/描述>
< /任务><任务>
<日期和GT; 04/08/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述> swdefswde< /描述>
< /任务><任务>
<日期和GT; 04/02/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述>测试与LT; /描述>
< /任务><任务>
<日期和GT; 04/01/2013< /日期和GT;
<标题> egfwe< /标题>
<描述> wefwef< /描述>
< /任务><任务>
<日期和GT; 04/03/2013< /日期和GT;
<标题> ssdv< /标题>
<描述> ssdvs< /描述>
< /任务>< /日历>

我试图将它们添加到一个数组,并采取按日期元素[改写,然后用排序XML xml文件。有人能帮帮我吗?

我已经厌倦了以下code,但不工作[甚至不能将它们添加到阵列]

  $ xml_temp =阵列();
的foreach($ xml_add->的任务,因为$ aTask){
    $ xml_temp [] = $ aTask;
    }    的print_r($ xml_temp);


解决方案

您阵列的罚款。你需要接下来的事情就是 usort

  $ XML = simplexml_load_string(LT;<< XML
< XML版本=1.0&GT?;
<&压延GT;<任务>
<日期和GT; 00/00/0000 LT; /日期和GT;
<标题>我的生日< /标题>
<描述>今天是我的生日<!/描述>
< /任务><任务>
<日期和GT; 04/08/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述> swdefswde< /描述>
< /任务><任务>
<日期和GT; 04/02/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述>测试与LT; /描述>
< /任务><任务>
<日期和GT; 04/01/2013< /日期和GT;
<标题> egfwe< /标题>
<描述> wefwef< /描述>
< /任务><任务>
<日期和GT; 04/03/2013< /日期和GT;
<标题> ssdv< /标题>
<描述> ssdvs< /描述>
< /任务>< /日历>
XML
);
$ ARR =阵列();
的foreach($ XML的>的任务,因为$ aTask)
{
    $常用3 [] = $ aTask;
}
//的print_r($ ARR);
/ *注释上述行来调试* /
usort($ ARR,函数($ A,$ B){
    返回的strtotime($ A->日期)-strtotime($ B->日期);
});
//的print_r($ ARR);
/ *注释上述行来调试* /
$ XML = simplexml_load_string(LT;<< XML
< XML版本=1.0&GT?;
<&压延GT;
< /日历>
XML
);
的foreach($改编为$ aTask)
{
    $ tTask = $ XML->的addChild($ aTask->的getName());
    $ tTask->的addChild($ aTask->与日期>的getName(),(串)$ aTask->日期);
    $ tTask->的addChild($ aTask->标题 - >的getName(),(串)$ aTask->标题);
    $ tTask->的addChild($ aTask->说明 - >的getName(),(串)$ aTask->说明);
}
回声$ XML的> asXML();

回应的XML(手动格式使它看起来更好):

 <?XML版本=1.0&GT?;
<&压延GT;<任务>
<日期和GT; 00/00/0000 LT; /日期和GT;
<标题>我的生日< /标题>
<描述>今天是我的生日<!/描述>
< /任务><任务>
<日期和GT; 04/01/2013< /日期和GT;
<标题> egfwe< /标题>
<描述> wefwef< /描述>
< /任务><任务>
<日期和GT; 04/02/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述>测试与LT; /描述>
< /任务><任务>
<日期和GT; 04/03/2013< /日期和GT;
<标题> ssdv< /标题>
<描述> ssdvs< /描述>
< /任务><任务>
<日期和GT; 04/08/2013< /日期和GT;
<标题>测试与LT; /标题>
<描述> swdefswde< /描述>
< /任务>< /日历>

需要PHP> = 5.3

<大骨节病> 现场演示

Below is my XML file

<?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>

I'm trying to add them into an array, and resort the elements by date [then rewrite the xml file with the sorted xml]. Can someone please help me?

I have tired the following code but doesnt work [cant even add them to array]

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

    print_r ($xml_temp);

解决方案

Your array is fine. The next thing you need is 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();

The echoed XML (manually formatting to make it look nicer):

<?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>

Requires PHP >= 5.3

Live demo

这篇关于按日期排序PHP XML元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆