1

次のデータを含むXMLファイルがあります…</p>

<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の最高のポストビュー値を見つけてから親ノードのポストIDを取得したいので、基本的にトップ10のポストビューのIDを取得します。

私はこれについてどうやって行くのか分かりません、誰か助けてもらえますか?XMLファイルをロードした場合、XMLファイルはすでに配列になっていますか... </ p>

$xml = simplexml_load_file($xmlFile);

ありがとう、ジェームズ

4

2 に答える 2

3

これは、各SimpleXML要素を配列に追加postし、次を使用してその配列を並べ替えることによって実行でき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の後にループを停止するか、最初の10の後にすべてを実行できunset()ます。

出力

投稿ID22640は72ビュー
投稿ID22359は31ビュー
投稿ID20595は3ビュー
投稿ID22227は1ビュー
投稿ID20963は1ビュー

コードパッドデモ

于 2012-11-22T16:53:48.140 に答える
0

編集:笑、あなたは私のものではなく、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);

これは役に立ちましたか?

于 2012-11-22T16:43:00.760 に答える