使用PHP实现XML的逆序

使用PHP实现XML的逆序,php,xml,Php,Xml,我正在使用PHP从XML文件输出数据。它默认按时间顺序排列,我想颠倒一下。这在PHP中是可能的吗?如果是,怎么做 这是我的密码: $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

我正在使用PHP从XML文件输出数据。它默认按时间顺序排列,我想颠倒一下。这在PHP中是可能的吗?如果是,怎么做

这是我的密码:

    $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>';   
        }
    }
$file='1!'http://www.gostanford.com/data/xml/events/m-baskbl/2010/index.xml';
$xml=simplexml\u load\u文件($file);
foreach($xml作为$event\u date){
如果(!empty($event\u date->event['vn'])&&&!empty($event\u date->event['hn'])&&!empty($event\u date->event['vs'])&&&!empty($event\u date->event['hs']))
{ 
回音“
  • ”; 回显“”,$event_date->event['vn'],'vs',$event_date->event['hn'],''; 回显“”、$event\u date->event['vs']、“-”、$event\u date->event['hs']、“”; 回音“”,日期('fj,Y',strottime($event_date['date']),“

    ”; 回音“
  • ”; } }

    谢谢你的帮助

    显然,您可以将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>';
    }
    
    foreach($xml作为$event\u date){
    如果(!empty($event\u date->event['vn'])&&&!empty($event\u date->event['hn'])&&!empty($event\u date->event['vs'])&&&!empty($event\u date->event['hs']))
    { 
    $my[]=数组(
    “vn”=>$event_date->event['vn'],
    “hn”=>$event\u date->event['hn']
    ...
    );
    }
    }
    对于($i=count($my)-1;$i>=0;$i--){
    回音“
  • ”; 回音“,$my[$i]['vn'],'vs',$my[$i]['hn']; ... 回音“
  • ”; }

    希望这有帮助,它可能需要修复。

    如果
    $xml
    只是一个数组,您可以使用
    array\u 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
    }
    

    正如第一个答案所指出的,对于大型XML文档来说,这可能不是一个好主意。PHP5.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>';
        }
    }
    
    
    ?>
    
    event['vn'])&&!空($event_date->event['hn'])&&!空($event_date->event['vs'])&&!空($event_date->event['hs']))
    {
    回音“
  • ”; 回显“”,$event_date->event['vn'],'vs',$event_date->event['hn'],''; 回显“”、$event\u date->event['vs']、“-”、$event\u date->event['hs']、“”; 回显“”、$event_date['date']、“

    ”; 回显“”,$event\u date->event['local\u time'”,“

    ”; 回音“
  • ”; } } ?>
    是否可以反转输出而不是xml?即:

      $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;
        }
    
    $arr=array();
    foreach($xml作为$event\u date){
    如果(!empty($event\u date->event['vn'])&&&!empty($event\u date->event['hn'])&&!empty($event\u date->event['vs'])&&&!empty($event\u date->event['hs']))
    { 
    $strLine=“”;
    $strLine.='li>';
    $strLine.=''.$event\u date->event['vn'].'vs'.$event\u date->event['hn'.';
    $strLine.='。$event_date->event['vs'].-'.$event_date->event['hs'].

    '; $strLine.=''.$event_date['date'].

    '; $strLine.=''.$event\u date->event['local\u time'].

    '; $strLine.=''; $arr[]=$strLine; } } $arr=阵列_反向($arr); foreach($arr作为$line) { 回声线; }
    谢谢您的回复。不幸的是,这会生成此错误:警告:array_reverse()[function.array reverse]:参数应该是第14行的数组xml对象实际上不是数组。它实现了可遍历,因此可以在foreach中使用,但不能将其视为数组?列表没有那么长-最多可能200-300行。这似乎对我不起作用。我需要它以相反的时间顺序出现。您知道如何使其工作吗?很抱歉,响应太晚,您可以根据需要对数组进行排序。@Erik Nedwidek-谢谢,是的,我正在使用simplexml\u load\u文件和外部XML文件,并更新了我的问题以显示这一点。我似乎无法使您的代码正常工作-是否需要将simplexml\u load\u文件更改为使用simplexmlelement?@Ryan-您不需要对simplexml\u load\u文件执行任何操作。如果成功加载xml文件,则返回SimpleXMLElement对象(失败时为false)。在第二个foreach中,$xml需要是$xmlArray。(修复了原始答案)@Erik Nedwidek当我尝试您的更新答案时,我得到以下消息:致命错误:未捕获异常“exception”,消息为“String无法解析为XML”。知道我做错了什么吗?谢谢。@Ryan-一点也不知道。我在Fedora 14上使用PHP5.3.6。输出“PHP-v”:PHP5.3.6(cli)(构建时间:2011年3月17日20:58:15)@Erik Nedwidek您能编辑您的答案并添加simplexml加载文件吗?XML文件URL在我编辑的答案中。谢谢。谢谢。但是在你的例子中有几个语法错误,我不知道如何纠正。你能编辑你的代码吗?@Ryan抱歉。仍然在javascript模式下使用“var”。除了在我的IDE上检查所有内容之外。您是否遇到了具体错误?在Dreamweaver中,li中的四条strLine被标记为不正确。当我上传你的代码时,我得到了这个错误:解析错误:语法错误,意外','在线19@Ryan,好的,应该是固定的。