我有一个函数在post上接收一个字符串化的json对象。每次单击一个复选框时,我希望将该数据添加到数组中。出于某种原因,当我单击多个复选框时,它只存储我单击的第一个数据。我做错了什么?
public function add_to_composer() {
session_start();
$result = "1"; // maybe return 1 if the cdo was added into the session array, and -1 if it was deleted? just an idea
if(!isset($array))
{
$array = array($this->input->post());
$_SESSION['composer'] = $array;
}
else if(isset($array)) {
array_push($array, $this->input->post());
$_SESSION['composer'] = $array;
}
//$_SESSION['rep1']= json_encode($this->input->post(), true);
//array_push($_SESSION['composer'], $_SESSION['rep1']);
// add the cdo to the session array, or else remove it
var_dump($this->input->post());
}
答案 0 :(得分:0)
什么是$array
?对我而言,您似乎想要以下内容:
<?php
public function addToComposer() {
session_start();
$post = $this->input->post();
if (!is_array($post)) {
$post = array($post);
}
$_SESSION["composer"] = $post;
}
?>
为什么呢? $array
是一个本地(范围)变量,并且在您使用它时未初始化,因此它总是不是数组,因为它根本没有设置。
答案 1 :(得分:0)
我做错了什么?
你的条件都是多余的。 !isset($array)
始终为true
,因为$array
永远不会设置(即分配给)。这使得else
的存在变得多余(因此,存在第二个条件,BTW开始时是多余的,与第一个条件完全相反)。
通过取消从未使用的$result
的作业,您的功能归结为:
public function add_to_composer() {
session_start();
$_SESSION['composer'] = array($this->input->post());
//$_SESSION['rep1']= json_encode($this->input->post(), true);
//array_push($_SESSION['composer'], $_SESSION['rep1']);
// add the cdo to the session array, or else remove it
var_dump($this->input->post());
}
出于某种原因,当我点击多个复选框时,它只存储 我点击的第一个数据。
我认为以上部分也回答了这个问题:由于$_SESSION['composer']
每次都被重新分配,以前存储的数据会被覆盖。仅限最后一个帖子数据,而不是第一个。
...我希望将数据添加到数组中。
如果我的假设是正确的,那么可以通过以下方式实现:
$_SESSION['composer'][]=$this->input->post();
我希望这有助于澄清事情并为您提供指导方向。