Codeigniter,array in session,改变array in session in a specific key的值

Codeigniter, array in session, change the value of array in session in a specific key

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

                $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 是我想要访问的变量。我需要更改最后一个数字,it.In 我的控制器有以下内容。

$this->session->set_userdata('slots_id'[19], 100);

这里我试图将最后一个插槽的值设置为 100。但是我放在那里的“[19]”导致错误。

A PHP Error was encountered Severity: Notice Message: Uninitialized string offset: 19

Google对我目前的情况没有帮助,谢谢你的时间。

Uninitialized string offset PHP 中的错误有大量相关文档。您收到此错误是因为您没有引用数组的索引 19,而是引用了字符串的索引,这正是 'slots_id' 在本例中的含义。 'slots_id' 是 8 个字符长,这意味着超过 7 的任何索引实际上是未定义的。

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

解决问题的两种方法:

$this->session->set_userdata('slots_id'[19], 100); 并未尝试将值 100 分配给 $slots_id 数组索引 19 上的数组元素。它试图将值 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);

代码有点多,但我的建议是始终替换会话数据,而不是即时更新。