Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在codeigniter中设置会话中的数组?_Php_Arrays_Codeigniter - Fatal编程技术网

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”存储的旧数组