2

セッションで配列を設定するのに少し苦労しています。

これが私のコードです:-

コントローラ:

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

コントローラーのコントローラーでは、配列は返されません。最後に格納された値が返されます。

4

4 に答える 4

4

私は物事を誤解している可能性がありますが、1 つの値しか保存していないようです。

// 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);
于 2013-10-14T19:19:29.487 に答える
2

次のようにセッションデータに配列値を設定できます:-

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

それがあなたを助けることを願っています:)

于 2013-10-14T22:18:38.113 に答える
0

これは、$used_questions に渡すデータが値であるためです。

次のようなことをしたいかもしれません:

array_push($used_questions, $questions_for_test[$difficulty_level][$question_id]);

*配列への新しい値の追加/追加

于 2013-10-14T19:47:38.380 に答える
0

問題は、配列ではなく、$used_questions格納されている値を格納していることです。$questions_for_test[$difficulty_level][$question_id]

だからこうしろ$this->session->set_userdata('used_questions',$questions_for_test);

于 2013-10-14T19:24:09.157 に答える