私は自分のコードが単純であるにもかかわらず、自分の思い通りに動作しない理由を理解しようとしています。
私が抱えている問題は、逆の 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 番目のコメントが投稿されるまで表示されていました。
アイデアが不足しているので、誰かがこれを手伝ってくれることを願っています。
編集:配列を反転せずに同じコードを実行しようとしましたが、うまく機能しているようです。