【问题标题】:Sorting data from array from a xml file从 xml 文件中对数组中的数据进行排序
【发布时间】:2015-10-16 15:29:17
【问题描述】:

我需要帮助来弄清楚一些事情。

关于我的最后一个问题,我谈到了解析 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 是动态生成的,我无法控制它的形成方式。

非常感谢您的帮助。

干杯

【问题讨论】:

标签: php arrays xml sorting


【解决方案1】:

查看asort 和 PHP 中的类似函数,有一些会有所帮助。

【讨论】:

  • 嗯,你有没有看过里面的比较函数。 link
  • 你说得对,我可以这样做:sort($urlarray, SORT_STRING);
  • 很高兴我能帮上忙
【解决方案2】:

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

对于 PHP 版本 >= 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 版本

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

希望对您有所帮助。 问候,

【讨论】:

    【解决方案3】:

    我可以使用 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>';}
    ?>
    

    谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多