Ниже мой 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);
Ваш массив в порядке. Следующее, что вам нужно, это 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
Демо-версия
Здесь у вас несколько вопросов:
Кроме того, вопрос о том, как искать список SimpleXMLElements, можно разделить так, чтобы ваш конкретный вопрос не был ясен. Из вашего вопроса, похоже, вы уже поняли, что вам нужно преобразовать список SimpleXMLElements в массив.
Таким образом, вы, вероятно, ищете справочный вопрос о том, как сортировать многомерный массив:
Как вы видите, ваш вопрос имеет много аспектов, что затрудняет ответ. Stackoverflow работает лучше, если вы задаете конкретный вопрос программирования, а не полный скрипт;)