我有一个XML文件,其中包含以下数据......
<posts>
<post id="22359">
<postviews>31</postviews>
</post>
<post id="20963">
<postviews>1</postviews>
</post>
<post id="20595">
<postviews>3</postviews>
</post>
<post id="22640">
<postviews>72</postviews>
</post>
<post id="22227">
<postviews>1</postviews>
</post>
...etc etc
</posts>
我想找到前10个最高的postview值,然后获取父节点的帖子ID,所以我基本上拥有前10个帖子的ID。
我不知道如何解决这个问题,任何人都可以帮忙吗?如果我通过...
加载它,那么XML文件是否已经是一个数组$xml = simplexml_load_file($xmlFile);
谢谢,詹姆斯
答案 0 :(得分:3)
可以通过将每个post
SimpleXML元素添加到数组,然后使用usort()
对该数组进行排序来完成:
function cmp($a, $b){
if ((int)$a->postviews[0] == (int)$b->postviews[0]) {
return 0;
}
return ((int)$a->postviews[0] > (int)$b->postviews[0]) ? -1 : 1;
}
$xml = simplexml_load_string($xmlStr);
$posts = array();
foreach($xml->post as $p)
{
$posts[] = $p;
}
usort($posts, "cmp");
// $posts is now sorted by the views
// output them
foreach($posts as $post)
{
echo "Post ID " . $post->attributes()->id . " has " . (int)$post->postviews . " views\n";
}
如果您只想要前10名,那么只需使用for
循环或添加支票以在前10名之后停止循环,或者您可以unset()
在前10名之后的所有内容。
<强>输出强>
帖子ID 22640有72个视图
帖子ID 22359有31个视图
帖子ID 20595有3个视图
帖子ID 22227有1个视图
帖子ID 20963有1个视图
<强> Codepad Demo 强>
答案 1 :(得分:0)
编辑:lol,你可能想要使用MrCode的例子而不是我的例子。我完全忘记了XML是单独解释的。
好吧,我没有任何XML经验。但无论如何,我会尽力帮助。 不知道你想如何阅读XML文件,但我将在这里使用fgets():
$file_handle = fopen($xmlFile, "r");
$i = 1;
while ($i <= 31) { //We have the inital declaration, then 3 lines per read. 31.
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
$i++;
}
}
fclose($file_handle);
这有帮助吗?