Я думал, что это будет просто, но я не могу заставить его работать. Все, что я хочу сделать, это добавить значение в массив userdata. Если значение уже находится в массиве visible_news_items, я не хочу его заменять.
$data = array( 'username' => $this->input->post('username'), 'is_logged_in' => true, 'viewed_news_items' => array() ); $this->session->set_userdata($data);
вставить значение в массив views_news_items
$a = array($desk_id => $desk_id); $this->session->set_userdata('viewed_news_items', $a);
Вы используете $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 и затем вернуть его обратно в сеанс:
# 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);
вызывается тип данных, которые вы извлекли из сеанса, и используйте его по своему усмотрению.
$ID = 123; $data = (array)$this->session->userdata("session_name"); $data[] = $ID; $this->session->set_userdata("session_name",$data);