首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用simplexml对OPML进行排序

用simplexml对OPML进行排序
EN

Stack Overflow用户
提问于 2013-12-19 20:27:11
回答 1查看 307关注 0票数 0

我在这里读过一堆文章,但我仍然不知道如何使用simplexml函数从OPML文件中读取数据。我意识到这是一种复制,但我显然太慢了,不能用抽象的例子来纠正这个问题。

我有一个相当标准的OPML文件,其内容如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
<!-- OPML generated by Fever -->
<head><title>Fever // Coffee</title></head>
<body>    
    <outline type="rss" text="I Love Coffee" title="I Love Coffee" xmlUrl="http://en.ilovecoffee.jp/posts/rss" htmlUrl="http://www.ilovecoffee.jp"/>
    <outline type="rss" text="Dear Coffee I Love You" title="Dear Coffee I Love You" xmlUrl="http://feeds.feedburner.com/DearCoffeeILoveYou" htmlUrl="http://www.dearcoffeeiloveyou.com"/>
</body>
</opml>

我正在使用最简单的代码生成一个标记列表:

代码语言:javascript
复制
foreach ($opml->body->outline as $feed) {
    echo '* [' . $feed['title'] . '](' . $feed[htmlUrl] . ')' . "\n";
}

我只是想按照"title“属性对列表进行排序,但我无法理解如何做到这一点。

根据我的理解,我需要将xml对象转换为数组,我可以这样做:

代码语言:javascript
复制
$json = json_encode($opml);
$xml_array = json_decode($json,TRUE);

但我似乎不能正确地按“标题”对数组进行排序

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-21 13:24:14

与其盲目地将整个XML文档转换为数组(这很少是一个特别有用的数组),您应该构建一个包含所需项的数组:

代码语言:javascript
复制
$feed_list = array();
foreach ($opml->body->outline as $feed) {
     $feed_list[] = $feed;
}

然后,您可以使用usort()根据您想要的任何条件对项目进行排序,例如使用strcasecmp()提供不区分大小写的字母数字顺序:

代码语言:javascript
复制
usort($feed_list, function($a, $b) {
     // $a and $b are SimpleXMLElement objects which are being sorted
     return strcasecmp( (string)$a['title'], (string)$b['title'] );
});

现在有一个排序数组传递给现有的显示逻辑:

代码语言:javascript
复制
foreach ( $feed_list as $feed ) {
    echo '* [' . $feed['title'] . '](' . $feed['htmlUrl'] . ')' . "\n";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20691044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档