1

私は自分のコードが単純であるにもかかわらず、自分の思い通りに動作しない理由を理解しようとしています。

私が抱えている問題は、逆の simplexml 配列で sizeof() または count() をチェックしようとしたときに正しい値を取得することです。私は、comments.xml にコメントを保存するコメント フォームを作成しています。次に、5 つの最新のコメントを読み取り、それらを一番上に、最も古いものを一番下にリストします。

私がcomments.xmlの中に持っているもの:

<root>
 <entry>
  <name>Admin</name>
  <comment>Some nice comment</comment>
  <postedOn>07.07.2013</postedOn>
  <postedBy>***.***.***.***</postedBy>
 </entry>
</root>

私の.phpの中にあるもの:

<?php
$xml = simplexml_load_file("comments.xml");

$reverseArray = (array) $xml;
$reverseArray = array_reverse($reverseArray["entry"]);
$limit = sizeof($reverseArray);
//$limit = count($reverseArray);

if($limit > 5){ $limit = 5; }

for ($i = 0 ; $i < $limit; $i++){
    echo "<div class='panel'>";
    echo "<span style='float: right;'>" . $reverseArray[$i]->postedOn . "</span>";
    echo "<span style='float: left;'>" . $reverseArray[$i]->name . "</span>";
    echo "<hr>";
    echo $reverseArray[$i]->comment;
    echo "<br></div>";
}

?>

問題は、これをcomments.xml内の1つのエントリのみで使用すると、それが読み取られず、ページに何も印刷されないことです。別のエントリを追加するたびに、両方が表示されます。

また、$limit-check の前に「No comments yet.」コードを追加しようとしました。

if($limit == 0){ echo "<div class='panel'>No comments. :(</div>";}

そして、2 番目のコメントが投稿されるまで表示されていました。

アイデアが不足しているので、誰かがこれを手伝ってくれることを願っています。

編集:配列を反転せずに同じコードを実行しようとしましたが、うまく機能しているようです。

4

1 に答える 1