Php 如何在codeigniter中设置会话中的数组?
我在会话中设置数组时有点困难 这是我的密码:- 控制器:Php 如何在codeigniter中设置会话中的数组?,php,arrays,codeigniter,Php,Arrays,Codeigniter,我在会话中设置数组时有点困难 这是我的密码:- 控制器: function taketest(){ $this->load->model('', ''); $questions_for_test = $this->session->userdata('questions_for_test'); $difficulty_level = $this->session->userdata('difficulty_level'); $q
function taketest(){
$this->load->model('', '');
$questions_for_test = $this->session->userdata('questions_for_test');
$difficulty_level = $this->session->userdata('difficulty_level');
$question_id = $this->session->userdata('question_id');
if($question_id==""){
$question_id = $this->myjcat->returnRandomQuestion($questions_for_test,$difficulty_level);
$this->session->set_userdata('question_id',$question_id);
}
$question_details = $this->myjcat->getQuestion($question_id);
}
function returnRandomQuestion($questions_for_test, $difficulty_level){
$question_id = array_rand($questions_for_test[$difficulty_level], 1);
$used_question=array();
$used_questions=$questions_for_test[$difficulty_level][$question_id];
$this->session->set_userdata('used_questions',$used_questions);
return $questions_for_test[$difficulty_level][$question_id];
}
型号:
function taketest(){
$this->load->model('', '');
$questions_for_test = $this->session->userdata('questions_for_test');
$difficulty_level = $this->session->userdata('difficulty_level');
$question_id = $this->session->userdata('question_id');
if($question_id==""){
$question_id = $this->myjcat->returnRandomQuestion($questions_for_test,$difficulty_level);
$this->session->set_userdata('question_id',$question_id);
}
$question_details = $this->myjcat->getQuestion($question_id);
}
function returnRandomQuestion($questions_for_test, $difficulty_level){
$question_id = array_rand($questions_for_test[$difficulty_level], 1);
$used_question=array();
$used_questions=$questions_for_test[$difficulty_level][$question_id];
$this->session->set_userdata('used_questions',$used_questions);
return $questions_for_test[$difficulty_level][$question_id];
}
但当我打电话时:
$used_questions = $this->session->userdata('used_questions');
内部控制器
在控制器中,它不会返回数组。它会给我存储在其中的最后一个值。我可能误读了内容,但看起来您只存储了一个值
// this code:
$used_questions=$questions_for_test[$difficulty_level][$question_id];
$this->session->set_userdata('used_questions',$used_questions);
// is the same as this code
$this->session->set_userdata('used_questions',$questions_for_test[$difficulty_level][$question_id]);
您可能正在寻找以下内容:
// fetch the stored copy first.
$used_questions = $this->session->userdata('used_questions');
if(!is_array($used_questions)) $used_questions = array();
// note the []
$used_questions[] = $questions_for_test[$difficulty_level][$question_id];
$this->session->set_userdata('used_questions',$used_questions);
问题是
$used\u questions
存储的是$questions\u中存储的值,用于测试[$defestibility\u level][$question\u id]
,而不是数组
这样做
$this->session->set_userdata('used_questions',$questions_for_test)代码>这是因为传递给$used\u问题的数据是一个值
您可能希望执行以下操作:
array_push($used_questions, $questions_for_test[$difficulty_level][$question_id]);
*向数组追加/添加新值您可以在会话数据中设置如下数组值:-
$this->session->set_userdata('used_questions', json_encode($used_questions));
并检索以下数据:-
json_decode($this->session->userdata('used_questions'));
如果希望检索到的数组数据作为关联数组:-
json_decode($this->session->userdata('used_questions'), true);
希望它能帮助您:)是的,它是相同的。但是每次调用此函数时,都会使用一个问题。因此,我需要制作一个数组,以便使用过的问题不能重复。这无法解决我的问题。因为$questions\u for\u test是问题总数的数组。但是我需要制作一个使用过的问题的数组。因此,这样做:$used_questions=$this->session->userdata('used_questions')$已使用的试题[$难度等级][$试题id]=$试题测试[$难度等级][$试题id]$此->会话->设置用户数据('used\u questions',$used\u questions);这将允许您恢复会话中由de array存储的问题,然后将它们添加到新问题中。最后,使用set_userdata在会话中存储“新数组”(其中包含旧值和新值),重写使用键“used_questions”存储的旧数组