PHP会话数组重复

时间:2015-02-20 11:02:02

标签: php arrays session array-push

我尝试使用一些预定义的值设置会话数组,然后用户可以使用简单的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']);
?>

3 个答案:

答案 0 :(得分:2)

仅初始化会话变量(如果尚未设置):

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

答案 1 :(得分:1)

检查

  

in_array( 'YOUR_VALUE',$ _ SESSION [ '动物'])

在重新插入之前

以避免重复。
参考:in_array

答案 2 :(得分:0)

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

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

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

unset($_SESSION['animals']); 

您可以在$ _POST ['extraValue']中访问您的额外值。然后,您可以合并两个数组,如

 $postValues = array_merge($_POST['extraValue'], $_POST['entry1']);

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