我正在使用PHP从XML文件输出数据。这是违反时间顺序的,我想反过来。这可能用PHP吗?如果是这样,怎么样?
这是我的page和代码:
$file = 'http://www.gostanford.com/data/xml/events/m-baskbl/2010/index.xml';
$xml = simplexml_load_file($file);
foreach ($xml as $event_date) {
if(!empty($event_date->event['vn']) && !empty($event_date->event['hn']) && !empty($event_date->event['vs']) && !empty($event_date->event['hs']))
{
echo '<li>';
echo '<h3>', $event_date->event['vn'], ' vs ', $event_date->event['hn'], '</h3>';
echo '<p><strong>', $event_date->event['vs'], ' - ', $event_date->event['hs'], '</strong></p>';
echo '<p>', date('F j, Y', strtotime($event_date['date'])), '</p>';
echo '</li>';
}
}
感谢您的帮助!
答案 0 :(得分:6)
正如第一个答案所指出的,这对于大型XML文档来说可能不是一个好主意。 PHP 5.1.2及更高版本的最简单和最可移植的代码可能是使用SimpleXML。它可能已经内置到早期的PHP版本中,但它在5.1.2之后是标准的。
<?php
$file = 'http://www.gostanford.com/data/xml/events/m-baskbl/2010/index.xml';
$xml = simplexml_load_file($file);
if ($xml === false) {
echo "Couldn't load file\n";
exit (1);
}
$xmlArray = array();
foreach ($xml as $event_date) $xmlArray[] = $event_date;
$xmlArray = array_reverse($xmlArray);
foreach ($xmlArray as $event_date) {
if(!empty($event_date->event['vn']) && !empty($event_date->event['hn']) && !empty($event_date->event['vs']) && !empty($event_date->event['hs']))
{
echo '<li>';
echo '<h3>', $event_date->event['vn'], ' vs ', $event_date->event['hn'], '</h3>';
echo '<p><strong>', $event_date->event['vs'], ' - ', $event_date->event['hs'], '</strong></p>';
echo '<p>', $event_date['date'], '</p>';
echo '<p>', $event_date->event['local_time'], '</p>';
echo '</li>';
}
}
?>
答案 1 :(得分:2)
如果$xml
只是一个数组,您可以使用array_reverse($xml)
来反转它:
foreach (array_reverse($xml) as $event_date) {
// etc
}
但是,如果它很长,那可能效率不高。您可以使用带有递减索引的手动for循环:
for ($i = sizeof($xml) - 1; $i >= 0; --$i) {
// use $xml[$i] to access each element
}
答案 2 :(得分:1)
显然,您可以将xml读取到数组并以相反的顺序打印。但是,这可能不是一个很长的清单。
修改强>
foreach($xml as $event_date){
if(!empty($event_date->event['vn']) && !empty($event_date->event['hn']) && !empty($event_date->event['vs']) && !empty($event_date->event['hs']))
{
$my[]=array (
"vn" => $event_date->event['vn'],
"hn" => $event_date->event['hn']
...
);
}
}
for($i=count($my)-1;$i>=0;$i--) {
echo '<li>';
echo '<h3>', $my[$i]['vn'], ' vs ', $my[$i]['hn'];
...
echo '</li>';
}
希望这有帮助,可能需要修复。
答案 3 :(得分:1)
你可以反转输出而不是xml吗? IE:
$arr = array();
foreach($xml as $event_date){
if(!empty($event_date->event['vn']) && !empty($event_date->event['hn']) && !empty($event_date->event['vs']) && !empty($event_date->event['hs']))
{
$strLine = "";
$strLine .= '<li>';
$strLine .= '<h3>'. $event_date->event['vn']. ' vs '. $event_date->event['hn']. '</h3>';
$strLine .= '<p><strong>'. $event_date->event['vs']. ' - '. $event_date->event['hs']. '</strong></p>';
$strLine .= '<p>'. $event_date['date']. '</p>';
$strLine .= '<p>'. $event_date->event['local_time']. '</p>';
$strLine .= '</li>';
$arr[] = $strLine;
}
}
$arr = array_reverse($arr);
foreach ($arr as $line)
{
echo $line;
}