Below is my XML file
00/00/0000
My Birthday
You have multiple questions here:
Additionally the question about how to search a list of SimpleXMLElements can be further subdivided so your concrete question is not clear. From your question it looks like you've already understood you need to convert the list of SimpleXMLElements into an array.
So you're probably looking for the reference question how to sort a multidimensional array as well:
As you can see your question has many facets which makes it hard to be answered. Stackoverflow works better if you ask a concrete programming question and not for a full script ;)
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