0

我有一个函数在帖子上接收字符串化的 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());
}
4

2 回答 2

0

是什么$array?对我来说,您似乎想要以下内容:

<?php

public function addToComposer() {
    session_start();
    $post = $this->input->post();
    if (!is_array($post)) {
        $post = array($post);
    }
    $_SESSION["composer"] = $post;
}

?>

为什么?$array是一个局部(作用域)变量,并且在您使用它时未初始化,因此它始终不是数组,因为它根本没有设置。

于 2013-11-08T22:12:14.980 回答
0

我究竟做错了什么?

你的条件都是多余的。!isset($array)将永远是true,因为$array从未设置(即分配给)。这使得else冗余的存在(因此,第二个条件的存在,顺便说一句,一开始是多余的,与第一个条件完全相反)。

通过消除$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();

我希望这有助于澄清事情并为您提供正确方向的指南。

于 2013-11-08T22:56:44.990 回答