2017-05-19 15 views
1

PHPとCodeigniterの新機能です。PHP/Codeigniterのオブジェクト(stdClass)と配列の比較array_intersect

私は2つの異なる配列を比較しようとしています(1つは文字列で、もう1つはオブジェクト(stdClass)で計算し、結果を計算するために同様の値を数えます) ?文字列またはその逆にすべてのヘルプは理解されるであろう

これは私が今持っているコードの一部です:。

Result.php

$countcorrectuser = count(array_intersect($_SESSION['correctanswers'], $_SESSION['useranswers'])); 
$countcorrect = count($_SESSION['correctanswers']); 
$totalresult = $countcorrectuser/$countcorrect; 
$this->session->set_userdata('totalresult', $totalresult); 

Run.php

// $_SESSION['correctanswers'] 
$correctanswers = $this->Question_model->getAllAnswers(); 
$this->session->set_userdata('correctanswers', $correctanswers); 

// $_SESSION['useranswers'] When the next question submit button is pressed 
if(!isset($_SESSION['useranswers'])){ 
    $_SESSION['useranswers'] = array(); 
} 
    $_SESSION['useranswers'][] = $this->input->post('useranswer'); 

Question_model.php

function getAllAnswers(){ 
    $query = $this->db->query('SELECT answer FROM question WHERE exam_id = \'' . $_SESSION['examid'] .'\''); 
    return $query->result(); 
} 

のvar_dumpの例($ _ SESSION [ 'correctanswers'])。

array(4) { [0]=> object(stdClass)#25 (1) { ["answer"]=> string(6) "answer" } etc. 

var_dump($ _ SESSION ['usersanswers'])の例。

array(4) { [0]=> string(6) "answer" etc. 

答えて

2

一部のコードの変更は読みやすくするためのものです。また、可読性とセキュリティのためにQuery Bindingも使用しています。

クエリの結果は、ループを使用して、$_SESSION['usersanswers']構造に一致する配列を作成します。

function getAllAnswers() 
{ 
    $sql = 'SELECT answer FROM question WHERE exam_id = ?'; 
    $answers = $this->db->query($sql, [$_SESSION['examid']])->result(); 
    $results = [];//empty array so there is always something to return 
    foreach($answers as $answer){ 
     $results[] = $answer->answer; 
    } 
    return $results; 
} 
+0

ご回答ありがとうございます。オブジェクトは配列であり、配列の配列と同様です。配列内の配列をただの文字列に変換する方法はありますか?()配列?私はこのエラーが発生しています:メッセージ:文字列変換への配列 – user1992

+0

私の改訂版のチェックアウト。 – DFriend

+0

ありがとうございます!それは今働いている。 – user1992

関連する問題