1

以下は私の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);
4

2 に答える 2

3

あなたの配列は大丈夫です。次に必要なものは次の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 が必要

Live demo

于 2013-04-09T04:01:22.537 に答える