我认为这很简单,但我似乎无法让它发挥作用。我想要做的就是在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);
答案 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);