2017-04-15 13 views
-1

以下のスニペットを使用して、チェックロールをアーカイブする手助けがあります。私が達成したいのは、割り当てられた役割に応じてユーザーを認証できることです。
戻り値の配列では、in_array()が機能しません。 返される配列は次のとおりです。codeigniterを使用してdbからin_arrayをチェックする

array (size=2) 0 => object(stdClass)[40] public 'role' => string '2' (length=1) 1 => object(stdClass)[41] public 'role' => string '5' (length=1) 

私は任意の助けを感謝しています。おかげ

DB TABLE 
id user_id role 
1 4  2 
2 4  5 

モデル

//get logged user roles 
public function user_roles($id){ 
    $userDB = $this->quickDB(); 
    $userdata = $userDB->query("SELECT role 
          FROM role_assignment 
          WHERE user_id = $id 
          ")->result(); 
    $userDB->close(); 
    return ($userdata); 
} 

コントローラー:あなたのコード内

public function user_roles() 
{ 
    $roles=$this->Master_model->user_roles('4'); 

    if (in_array("1", $roles)) 
    { 
     echo "Admin<br>"; 
    } 
    if (in_array("2", $roles)) 
    { 
     echo "Teacher<br>"; 
    } 
    if (in_array("5", $roles)) 
    { 
     echo "Academic<br>"; 
    } 
} 
+0

あなたの質問は何ですか?何が問題になっていますか? – shaggy

答えて

0

in_arrayが動作することはできません。あなたは2つの変更を加える必要があります。

まず - 今、あなたはobjetctなっている、配列にあなたのDBの出力を変更します。

$userdata = $userDB->query("SELECT role 
         FROM role_assignment 
         WHERE user_id = $id 
         ")->result_array(); 

セカンド - DB結果を通じてitterateと修正された配列を返す:

$user_roles = array(); 
foreach ($userdata as $val) { 
    $user_roles[] = $val['role']; 
} 
return $user_roles; 

両方の変更が内部user_roles機能ですあなたのモデルで。

+0

ありがとうございます。 2番目のコードを配置する場所はどこですか? $ user_rolesを返すのであれば、foreachの使い方は何ですか? –

+0

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

+0

しかし、$ value ['role']を$ val ['role']に変更しました –

関連する問題