下面是我的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(手动格式化使其看起来更好):
<?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列表进行排序。一个参考问题是:
- PHP的simpleXML排序问题
- 你需要在默认情况下不支持的SimpleXMLElement中添加一个element-into。这在以下文件中有详细说明:
- SimpleXML:将一个树附加到另一个
- 在SimpleXML,我怎么能添加一个现有的SimpleXMLElement作为子元素?
此外,关于如何搜索SimpleXMLElements列表的问题可以进一步细分,因此您的具体问题不清楚。从你的问题看来,你已经明白你需要将SimpleXMLElements列表转换为数组。
所以你可能正在寻找如何排序多维数组的参考问题:
- 如何在php中排序多维数组
正如你所看到的,你的问题有很多方面,很难回答。如果你问一个具体的编程问题,而不是一个完整的脚本,Stackoverflow会更好;)