PHP XML反向数组sizeof()和count()返回不正确的值

时间:2013-07-07 16:05:19

标签: php xml

我一直在试图弄清楚为什么我的代码尽管很简单,却无法按照我想要的方式运行。

我遇到的问题是在尝试检查反向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之前的代码:

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

直到第二条评论发布后才可见。

我希望有人可以帮助我解决问题。

编辑: 我尝试运行相同的代码而不反转数组,它似乎工作正常。

1 个答案:

答案 0 :(得分:0)

我设法构建了一个变通方法,因为sizeof()/ count()与array_reverse不兼容,现在看起来像是这样:

<?php
$xmlfile = simplexml_load_file("comments.xml");
$limit = count($xmlfile->entry);

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

if($limit == 1){
    echo "<div class='panel'>";
    echo "<span style='float: right;'>" . $xmlfile->entry[0]->postedOn . "</span>";
    echo "<span style='float: left;'>" . $xmlfile->entry[0]->name . "</span>";
    echo "<hr>";
    echo $xmlfile->entry[0]->comment;
    echo "<br></div>";  
}else{
    $reverseArray = (array) $xmlfile;
    $reverseArray = array_reverse($reverseArray["entry"]);

    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>";
    }
}
?>

所以我必须让它处理一个非反转的条目。希望这有助于其他与之斗争的人!