数组保持写入0索引

时间:2014-03-20 00:48:02

标签: php arrays

我正在制作一个超级基本的日记程序,用户将文本输入到表单中,当他们点击提交时,页面会显示最近的帖子,其中最新的帖子位于顶部,最旧的帖子位于底部。

当我尝试向我的数组添加新条目时,无论是使用[] =还是array_push,数组都会继续写入数组的0索引,我无法弄清楚原因。我还没有能够在网上找到任何相关内容,而且我已经在这脑子里乱了几个小时。有没有人有任何想法?

(我也意识到这是一个非常蹩脚的程序,但这只是一个旨在简要介绍PHP的作业。)

<form action="<?print($_SERVER['SCRIPT_NAME'])?>" method="get">
    <textarea style="margin:auto;" rows="10" cols="50" name="diaryentry"></textarea>
    <input style="margin:auto;" type="submit" value="Submit" />
</form>

<?php
    if(!isset($_SESSION['entries']))
        $_SESSION['entries'] = array();

    $entries = array();
    $entries = &$_SESSION['entries'];
    $entries []= htmlentities(&$diaryentry);

    $reversed = array_reverse($entries, true);
?>

<p><?php 
     foreach($reversed as $entry){
     echo $entry . "<br>";
     }?>
</p>

3 个答案:

答案 0 :(得分:0)

它的标准行为。

如果没有$array[0],它将开始在那里写,不管它可能包含的其他索引。如果它包含$array[0]$array[1],则会继续在$array[2]处写。基本上它开始写在[0]并继续在路上(即使存在$array['a']$array['b'])。

在旁注中,除非您非常清楚它的作用以及您使用它的原因,否则请勿使用参考运算符&。现在它完全没用了。使用它可能(并且可能会)导致代码中的错误,这些错误很难被追踪。很少需要使用&

答案 1 :(得分:0)

正如评论中提到的那样,您使用的是$_SESSION个变量,但尚未调用session_start()。正如您所发现的那样,除非在将任何类型的输出发送到浏览器之前调用它,否则session_stert将无效。

因此,请使用<?php session_start(); ?>开始您的文件,您应该开展业务。

顺便说一下,考虑使用<form action="" method="post"> - 这是一种更可靠的方式来回发到同一个网址。当您发现“漂亮”的网址时,此功能特别有用。

答案 2 :(得分:0)

尝试这样的事情:     

    if(!isset($_SESSION['entries']))
        $_SESSION['entries'] = array();

    $_SESSION['entries'][] = htmlentities($_POST['diaryentry']);

    $reversed = array_reverse($_SESSION['entries'], true);
?>

以前似乎有很多不必要的变量赋值。