【问题标题】:Ordering XML foreach results in PHP在 PHP 中订购 XML foreach 结果
【发布时间】:2013-04-04 15:53:27
【问题描述】:

这是我的代码,它显示了我所追求的结果,但是否可以按顺序列出它们或

    $xml = simplexml_load_file('racing.xml');

    foreach ($xml->sport[0]->event_path->event_path as $gameinfo):

    $description        =   $gameinfo->description;
    $getdate            =   $gameinfo->event['date'];
    $event_id           =   $gameinfo->event['id'];
    $date               =   substr($getdate,0,10);

代码

    <?=substr($description, -5)?>

将变量留给我作为时间,即:14:40、15:50:14:20:18:40 等,但它们按 XML 的顺序而不是按时间显示。

是否可以包含一行代码来按日期变量对结果进行排序?

【问题讨论】:

    标签: php xml foreach simplexml


    【解决方案1】:

    首先是一些改进代码的一般提示:

    foreach ($xml->sport[0]->event_path->event_path as $gameinfo):
    

    是个坏主意。取而代之的是,我给自己做一个礼物,并给一个新的变量(你可以稍后感谢我):

    $gameinfos = $xml->sport[0]->event_path->event_path;
    foreach ($gameinfos as $gameinfo):
    

    所以现在您要对$gameinfos 进行排序。这里的问题是那些是迭代器而不是数组。 uasort 函数(以及所有其他数组排序函数)不会再为您提供任何帮助。幸运的是has been outlined already,您可以将迭代转换为数组:

    $gameinfos = iterator_to_array($gameinfos, FALSE);
    

    现在$gameinfos 是一个可以排序的数组。为此,获取定义排序顺序的值(应该对其中的$gameinfos 进行排序),我认为这是您在上面写的substr($description, -5) 的时间:

    $order = array();
    foreach ($gameinfos as $game) 
        $order[] = substr($game->description, -5)
    ;
    
    array_multisort($order, $gameinfos);
    
    // $gameinfos are sorted now.
    

    【讨论】:

      【解决方案2】:

      PHP 具有非常有用的排序功能,可以定义用户比较功能。见链接:http://www.php.net/manual/en/function.uasort.php

      【讨论】:

      • 虽然我在努力弄清楚如何将它应用到我的代码中,但明天我会用新的眼光来看看!谢谢!
      【解决方案3】:

      感谢您的宝贵时间!我现在有我的代码:

          $xml = simplexml_load_file('racing.xml');
      
          $gameinfos = $xml->sport[0]->event_path->event_path;
          foreach ($gameinfos as $gameinfo):
      
          $gameinfos = iterator_to_array($gameinfos, FALSE);
      
          $order = array();
          foreach ($gameinfos as $game) 
          $order[] = substr($game->description, -5) ;
      
          array_multisort($order, $gameinfos);
      
          // $gameinfos are sorted now.
      
          $description        =   $gameinfo->description;
          $getdate            =   $gameinfo->event['date'];
          $event_id           =   $gameinfo->event['id'];
          $date               =   substr($getdate,0,10);
      

      不过,这只会返回一个结果,我想我在某些地方出错了?

      【讨论】:

        猜你喜欢
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多