Codeigniter,会话中的数组,更改特定密钥中会话中数组的值



会话中有一个变量,它包含数字数组。我想更改该变量中的一个特定数字。我的会议:

$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);

这需要更多的代码,但我的建议是始终替换会话数据,而不是动态更新。

PHP中的Uninitialized string offset错误有大量的文档。您之所以出现此错误,是因为您没有引用数组的索引19,而是引用字符串的索引,这正是本例中的slots_idslots_id的长度为8个字符,这意味着任何超过7的索引实际上都是未定义的。

如果由于某种奇怪的原因无法直接访问$_SESSION超全局,则需要通过助手检索整个slots_id数组,更新本地副本中所需的索引,然后使用更新后的副本更新会话变量的slots_id数组。

相关内容

  • 没有找到相关文章

最新更新