PHP 会话数组复制

PHP Session Array Duplicating

我正在尝试使用一些预定义值设置一个会话数组,然后用户可以使用简单的 html 表单将其添加到其中。我的问题是,在设置数组的页面上,页面的任何刷新或重新访问只会复制数组中的预定义值。不仅如此,它还会在每次结束时覆盖来自表单的值。

所以在这个基本示例中,我有一个动物列表,用户可以向列表中添加其他动物。但这每次都会再次输出预定义的动物,即如果我提交两次表格(例如添加鸡然后添加狗)我得到输出:

Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => pig[5] => cow[6] => sheep[7] => dog) 

我想要的是:

Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => dog[5])

我做错了什么?

index.php

<?php
session_start();
//pre-defined list of animals
$_SESSION['animals'][] = 'pig';
$_SESSION['animals'][] = 'cow';
$_SESSION['animals'][] = 'sheep';
?>

<!--form to add another animal-->
<form action="go.php" method="POST">
  <p><input type="text" name="entry1"></p>
  <p><input type="submit" name="submit"></p>
</form>

go.php

<?php
session_start();
//add form entry1 to the session array
$_SESSION['animals'][] = $_POST['entry1'];

//print session array
print_r($_SESSION['animals']);
?>

勾选

in_array('YOUR_VALUE',$_SESSION['animals'])

在重新插入之前避免重复。
参考:in_array

仅在尚未设置会话变量时初始化它:

if (!isset($_SESSION['animals'])) {
    $_SESSION['animals'] = array('pig', 'cow', 'sheep');
}

我建议不要直接在会话中插入数据,而是添加隐藏的输入值,例如:

<input type=hidden name=extraValue[] value="pig">
<input type=hidden name=extraValue[] value="cow">
etc

在您的 PHP 页面中,取消设置上一个会话,因为您想要一个基于输入而不是旧值的 'fresh' 数据集。

unset($_SESSION['animals']); 

您可以在 $_POST['extraValue'] 中访问您的额外值。然后你可以像

这样合并两个数组
 $postValues = array_merge($_POST['extraValue'], $_POST['entry1']);

我还没有测试过这段代码,但我会使用它 'way',而不是在输入之前设置 SESSION 值。