多个数组进入会话

时间:2013-11-08 21:38:39

标签: php arrays

我有一个函数在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());
}

2 个答案:

答案 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();

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