在XML中订购XML foreach结果

时间:2013-04-04 15:53:28

标签: php xml foreach simplexml

这是我的代码,它显示了我之后的结果,但是可以按顺序列出它们或

    $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的顺序而不是按时间显示。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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 :(得分:0)

感谢您的时间!我现在的代码为:

    $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);

这只会返回一个结果,我想我已经走错了一些沿线的地方?