从xml文件中的数组中排序数据

时间:2015-10-16 15:29:17

标签: php arrays xml sorting

我需要帮助才能找到答案。

关于我的上一个问题,我在谈论解析XML并在html上列出值:Parse XML to HTML with PHP SimpleXMLElement

我的表现非常好,但随后出现了一个新的变量。 :)

这是我的XML:

<?xml version='1.0'?>
<AdXML>

<Response>
    <Campaign>
        <Overview>
            <Name>strip</Name>
                <Description>category</Description>
                <Status>L</Status>
        </Overview>
        <Pages>
            <Url>page01</Url>
            <Url>page02</Url>
            <Url>page03</Url>
        </Pages>
    </Campaign>
</Response>
</AdXML>

当我的XML生成页面列表random.so时,我的问题开始了,有一次它会像这样加载,而另一次它会像这样加载:

    <?xml version='1.0'?>
<AdXML>

<Response>
    <Campaign>
        <Overview>
            <Name>strip</Name>
                <Description>category</Description>
                <Status>L</Status>
        </Overview>
        <Pages>
            <Url>page02</Url>
            <Url>page03</Url>
            <Url>page01</Url>
        </Pages>
    </Campaign>
</Response>
</AdXML>

所以我从一个简单的开始:

<?php foreach ($xmlparsed->Response->Campaign->Pages->Url as $Url) {echo $Url, '<br>';} ?>

为:

<?php 
    $urlarray = array();
    foreach ($xmlparsed->Response->Campaign->Pages->Url as $Url) {$urlarray[] = $Url;}
    sort($urlarray);
    foreach ($urlarray as $key => $val){echo $key,'|',$val, '<br>';}
?>

我要做的是创建一个包含信息的数组,然后按字母顺序对页面进行排序。我不明白为什么我不能按值(页面)排序,我只能按键排序并且因为xml是动态生成而无法控制它的形成而打败了目的。

非常感谢你的帮助。

欢呼声

3 个答案:

答案 0 :(得分:0)

查看PHP中的asort和类似函数,有一些可以提供帮助。

答案 1 :(得分:0)

这是自定义排序数组的情况,在这种情况下我建议使用 usort

对于PHP版本&gt; = 5.4:

usort($urlarray, function ($a, $b) {
    if ((int)substr($a, 4, 2) > (int)substr($b, 4, 2)) return 1;
    elseif ((int)substr($a, 4, 2) < (int)substr($b, 4, 2)) return -1;
    else return 0;
});

对于PHP版本&lt; 5.4:

function custom_sort($a, $b) {
    if ((int)substr($a, 4, 2) > (int)substr($b, 4, 2)) return 1;
    elseif ((int)substr($a, 4, 2) < (int)substr($b, 4, 2)) return -1;
    else return 0;
}

// then using in usort
usort($urlarray, 'custom_sort');

希望这有帮助。 的问候,

答案 2 :(得分:0)

我能够使用SORT_STRING:

来做到这一点
<?php 
    $urlarray = array();
    foreach ($xmlparsed->Response->Campaign->Pages->Url as $Url) {$urlarray[] = $Url;}
    sort($urlarray, SORT_STRING);
    foreach ($urlarray as $key => $val){echo $key,'|',$val, '<br>';}
?>

谢谢大家