将值添加到userdata数组中

时间:2012-02-27 14:56:30

标签: php codeigniter

我认为这很简单,但我似乎无法让它发挥作用。我想要做的就是在userdata数组中添加一个值。如果一个值已经在seen_news_items数组中,我不想替换它。

             $data = array(
                'username' => $this->input->post('username'),
                'is_logged_in' => true,
                'viewed_news_items' => array()
            );

            $this->session->set_userdata($data);

将值插入到seen_news_items数组中

        $a = array($desk_id => $desk_id);
        $this->session->set_userdata('viewed_news_items', $a);

2 个答案:

答案 0 :(得分:4)

您使用$desk_id作为键和值,这意味着除非您已经拥有$desk_id,否则您将无法查找在阵列中。

而不是:

$a = array($desk_id => $desk_id);

您可能想要这样做:

$a = array('desk_id' => $desk_id);

也就是说,使用字符串 'desk_id'作为其对应值为$desk_id的密钥。


  

有没有办法让'desk_id'作为自动编号,所以每次执行代码时都会添加另一个值而不是替换'desk_id'?

您可以通过array_push($array, $value)$array[] = $value将项目推送到数组的末尾。 PHP将自动分配下一个数字ID作为新数组元素的索引。

在您当前的方案中,您必须从会话中提取现有的ID列表,为其附加ID,然后将其重新放回会话中:

# pull the existing IDs out of the session
$viewed_news_items =  $this->session->userdata('viewed_news_items');

# on first load, the array may not be initialized
if (!is_array($viewed_news_items))
  $viewed_news_items = array();

# append $desk_id to the list of viewed items
$viewed_news_items[] = $desk_id;

# put the new list back into the session
$this->session->set_userdata('viewed_news_items', $viewed_news_items);

答案 1 :(得分:1)

调用从会话中检索的数据类型 并根据需要使用它。

$ID = 123;
$data = (array)$this->session->userdata("session_name");
$data[] = $ID;
$this->session->set_userdata("session_name",$data);