PHP Сортировка элементов XML по дате

Ниже мой 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); 

Solutions Collecting From Web of "PHP Сортировка элементов XML по дате"

Ваш массив в порядке. Следующее, что вам нужно, это 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=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=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(); 

Echoed 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

Демо-версия

Здесь у вас несколько вопросов:

  1. Вы хотите отсортировать список SimpleXMLElements. Референтный вопрос для этого:
    • Проблема с сортировкой PHP с помощью simpleXML
  2. Вам нужно добавить элемент в элемент SimpleXMLElement, который по умолчанию не поддерживается. Это подробно изложено в:
    • SimpleXML: добавить одно дерево к другому
    • В SimpleXML, как я могу добавить существующий SimpleXMLElement в качестве дочернего элемента?

Кроме того, вопрос о том, как искать список SimpleXMLElements, можно разделить так, чтобы ваш конкретный вопрос не был ясен. Из вашего вопроса, похоже, вы уже поняли, что вам нужно преобразовать список SimpleXMLElements в массив.

Таким образом, вы, вероятно, ищете справочный вопрос о том, как сортировать многомерный массив:

  • Как отсортировать многомерный массив в php

Как вы видите, ваш вопрос имеет много аспектов, что затрудняет ответ. Stackoverflow работает лучше, если вы задаете конкретный вопрос программирования, а не полный скрипт;)