sort simplexml数组

时间:2011-11-27 10:47:35

标签: php xml simplexml sorting

我有这个simplexml数组,我设法从谷歌的例子开始工作。现在我必须对数组进行排序。

这就是我所拥有的。

$url = 'http://api.trademe.co.nz/v1/Member/2128687/Listings/All.xml';

$xml = simplexml_load_file($url);

foreach($xml->List->Listing as $list){
echo $list->EndDate;
echo '<br/>';
}

一切都按照它应该的样子运作。我想按最接近结束日期排序。

我已经尝试了所有可以找到的例子,而且我只是不断获得白屏。

请帮忙!

2 个答案:

答案 0 :(得分:0)

function cmp($a, $b)
{
    $a = strtotime($a->EndDate);
    $b = strtotime($b->EndDate);
    if ($a == $b) 
    {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

uasort($xml->List->Listing, 'cmp');
print_r($array);

答案 1 :(得分:0)

使用usort        

        $xml = simplexml_load_file($url);

        $listingarray = (array)$xml->List;
        $listingarray = $listingarray['Listing'];


    function compare($obj1,$obj2)
    {   
        $time1 = strtotime($obj1->EndDate); 
        $time2 = strtotime($obj2->EndDate); 

        if($time1 == $time2)
            return 0;

        return ($time1 > $time2 ? -1 : 1);
    }

    usort($listingarray,'compare');



        foreach($listingarray as $list)
        {
            echo $list->EndDate . '<br />';
        }
    ?>

如果您的php版本&gt; = 5.3,您可以将比较函数内联编写为参数..

usort($listingarray,function($obj1,$obj2)
    {   
        $time1 = strtotime($obj1->EndDate); 
        $time2 = strtotime($obj2->EndDate); 

        if($time1 == $time2)
            return 0;

        return ($time1 > $time2 ? -1 : 1);
});