会话中有一个变量,它包含数字数组。我想更改该变量中的一个特定数字。我的会议:
$user_data = array(
'user_id' => $user_id,
'username' => $username,
'logged_in' => true,
// 20 slots, the counting starts from 0, the last slot's position
// is 19.
'slots_id' => array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
);
因此,slots_id是我想要访问的变量。我需要更改最后一个数字,它。在我的控制器中,我有以下内容。
$this->session->set_userdata('slots_id'[19], 100);
在这里,我试图将最后一个插槽的值设置为100。但是;[19] ";我放在那里会导致错误。
A PHP Error was encountered Severity: Notice Message: Uninitialized string offset: 19
谷歌在我目前的情况下没有帮助我,谢谢你抽出时间。
解决问题的两种方法:
CCD_ 1未尝试为CCD_ 2数组的索引19上的数组元素分配值100。它试图将值100设置为'slots_id'
字符串的第20个字符(索引19(,这超出了界限。
您可以尝试:$this->session->set_userdata('slots_id[19]', 100);
或者更好的是,从会话中删除完整元素,更新并重置:
$aux = $this->session->userdata('slots_id');
$aux[19] = 100;
$this->session->unset_userdata('slots_id');
$this->session->set_userdata('slots_id', $aux);
这需要更多的代码,但我的建议是始终替换会话数据,而不是动态更新。
Uninitialized string offset
错误有大量的文档。您之所以出现此错误,是因为您没有引用数组的索引19,而是引用字符串的索引,这正是本例中的slots_idslots_id的长度为8个字符,这意味着任何超过7的索引实际上都是未定义的。
如果由于某种奇怪的原因无法直接访问$_SESSION
超全局,则需要通过助手检索整个slots_id
数组,更新本地副本中所需的索引,然后使用更新后的副本更新会话变量的slots_id
数组。