排序XML输出PHP

时间:2015-02-27 14:02:20

标签: php arrays xml sorting

我有这个XML链接XML OUTPUT。 如果链接已死,这是输出:

<channel>
<title>
Marktplaats.nl - Gevonden resultaten met de zoekterm 'volkswagen or nissan or audi or seat or kia or toyota or peugeot or volvo or bmw or chrysler or mini or citroen or hyundai or mercedes or mazda or alfa or jeep or daewoo or honda or jaguar or mitsubishi or rover or saab or skoda or suzuki or smart'
</title>
<link>http://www.marktplaats.nl</link>
<description>
Marktplaats.nl - Gevonden resultaten met de zoekterm 'volkswagen or nissan or audi or seat or kia or toyota or peugeot or volvo or bmw or chrysler or mini or citroen or hyundai or mercedes or mazda or alfa or jeep or daewoo or honda or jaguar or mitsubishi or rover or saab or skoda or suzuki or smart'. Kopen en verkopen van tweedehands of nieuwe producten en van diensten doet u op Marktplaats.nl, de advertentiesite van Nederland. Marktplaats.nl is een compleet overzicht van vraag en aanbod.
</description>
<language>nl</language>
<copyright>
Copyright (C) 1999-2015 Marktplaats.nl. Alle rechten voorbehouden.
</copyright>
<openSearch:totalResults>105976</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>100</openSearch:itemsPerPage>
<image>
<title>Marktplaats.nl</title>
<link>http://www.marktplaats.nl</link>
<url>//statisch.marktplaats.com/images/logo.gif</url>
</image>
<item>
<title>
<![CDATA[ Aangeboden: BMW 3-Serie 2.0 328I AUT 2012 Zwart ]]>
</title>
<link>
http://auto.marktplaats.nl/bmw/904347333-bmw-3-serie-2-0-328i-aut-2012-zwart.html
</link>
<description>
<![CDATA[
<img src="http://i.marktplaats.com/00/s/NzY4WDEwMjQ=/z/JDkAAOSwPYZU8XtY/$_82.JPG" align="absmiddle" border="0"> - Prijs: € 29.950,00 - Datum: Vandaag - Bmw 3 Serie Sedan 328ia High Execut Innovation Edit 4d 180kw Perfecte auto veel opties Inclusief zomer winter banden Vaste prijs 29 950
]]>
</description>
<pubDate>za, 28 feb 2015 14:04:56</pubDate>
<media:thumbnail url="http://i.marktplaats.com/00/s/NzY4WDEwMjQ=/z/JDkAAOSwPYZU8XtY/$_82.JPG" type="image/jpeg"/>
<media:content url="http://i.marktplaats.com/00/s/NzY4WDEwMjQ=/z/JDkAAOSwPYZU8XtY/$_82.JPG" type="image/jpeg"/>
<geo:lat>51.4385</geo:lat>
<geo:long>5.4742</geo:long>
</item>
<item>

我想要的是对键 pubDate 上的输出进行排序。 我已经使用以下代码将输出放在PHP数组中:

$xml = simplexml_load_file($url);
$xml_array = (array) $xml;

但是现在我想在 pubDate 上对数组进行排序,我该怎么做?输出最新的。

这是VAR_DUMP

Array

(     [@attributes] =&gt;排列         (             [版本] =&gt; 2.0         )

[channel] => SimpleXMLElement Object
    (
        [title] => Marktplaats.nl -  Gevonden resultaten met de zoekterm 'volkswagen or nissan or audi or seat or kia or toyota or peugeot or volvo or bmw or chrysler or mini or citroen or hyundai or mercedes or mazda or alfa or jeep or daewoo or honda or jaguar or mitsubishi or rover or saab or skoda or suzuki or smart'
        [link] => http://www.marktplaats.nl
        [description] => Marktplaats.nl - Gevonden resultaten met de zoekterm 'volkswagen or nissan or audi or seat or kia or toyota or peugeot or volvo or bmw or chrysler or mini or citroen or hyundai or mercedes or mazda or alfa or jeep or daewoo or honda or jaguar or mitsubishi or rover or saab or skoda or suzuki or smart'. Kopen en verkopen van tweedehands of nieuwe producten en van diensten doet u op Marktplaats.nl, de advertentiesite van Nederland. Marktplaats.nl is een compleet overzicht van vraag en aanbod.
        [language] => nl
        [copyright] => Copyright (C) 1999-2015 Marktplaats.nl. Alle rechten voorbehouden.
        [image] => SimpleXMLElement Object
            (
                [title] => Marktplaats.nl
                [link] => http://www.marktplaats.nl
                [url] => //statisch.marktplaats.com/images/logo.gif
            )

        [item] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [title] => SimpleXMLElement Object
                            (
                            )

                        [link] => http://auto.marktplaats.nl/mini/903961225-mini-mini-cooper-2003-grijs.html
                        [description] => SimpleXMLElement Object
                            (
                            )

                        [pubDate] => vr, 27 feb 2015 12:14:30
                    )

                [1] => SimpleXMLElement Object
                    (
                        [title] => SimpleXMLElement Object
                            (
                            )

                        [link] => http://auto.marktplaats.nl/rover/903951263-rover-200-serie-1-4-i-214-1999-nieuwe-apk-163-000-km.html
                        [description] => SimpleXMLElement Object
                            (
                            )

                        [pubDate] => vr, 27 feb 2015 11:48:45
                    )

                [2] => SimpleXMLElement Object
                    (
                        [title] => SimpleXMLElement Object
                            (
                            )

                        [link] => http://auto.marktplaats.nl/kia/902153232-kia-picanto-cvvt-luxe-x-treme-airco-ecc-leder-velgen-pdc.html
                        [description] => SimpleXMLElement Object
                            (
                            )

                        [pubDate] => zo, 22 feb 2015 07:32:09
                    )

2 个答案:

答案 0 :(得分:1)

由于几个问题,这不是一个简单的问题。这有效。它需要php&gt; = 5.3.0。

根据网站呈现月份[3,5,6,7,10]的情况,这可能仍然会阻塞,因为荷兰人使用different abbreviations来表示这些。

$url = 'http://kopen.marktplaats.nl/opensearch.php?s=100&q=chrysler&g=91';
$xml = simplexml_load_file($url);

setlocale(LC_TIME, 'nl_NL'); //Time strings are in Dutch.
date_default_timezone_set('Europe/Amsterdam'); //PHP will complain if this is not set.

//The comparison function usort() will use
function compare_item_dates($a, $b) {
    $format = 'j F Y G:i:s';
    $a_date = date_create_from_format($format, trim(substr($a->pubDate, 4)));
    //For troubleshooting. Delete the next line in production.
    if (!$a_date) print_r(array($a->pubDate, $a_date, date_get_last_errors())); 
    //End of troubleshooting area
    $b_date = date_create_from_format($format, trim(substr($b->pubDate, 4)));
    if ($a_date == $b_date) {
        return 0;
    }
    return ($a_date > $b_date) ? -1 : 1;
}

//Parse the items into an array
$xml_items = array();
foreach ($xml->channel->item as $item)
    $xml_items[] = $item;

//Sort the items using the comparison function
usort($xml_items, 'compare_item_dates');

//Generate output
print_r($xml_items);

答案 1 :(得分:0)

首先你必须创建自己的数组,因为pubDate值不是日期,它包含你必须删除的字符串(vr,zo等)。 然后,您可以使用array_multisort()对多维数组进行排序。 http://php.net/manual/en/function.array-multisort.php