より多くの言語で記事を読み込むオプションをユーザーに提供しようとしています。ユーザーが選択していない利用可能な言語のリストを表示しようとしており、ユーザーがオプションから削除できるように、既に選択されている言語を選択しています。
これが私がこれまでに得たものです:
class Options_model extends CI_Model{
protected $options = array(
'en' => 'English',
'it' => 'Italiano',
'fr' => 'Français',
'de' => 'Deutsch',
'es' => 'Español',
'no' => 'Norsk',
'ru' => 'Русский язык',
'ar' =>'العربية',
'zu' => '中文',
);
public function my_lang($user_id) {
$sql =
"SELECT lang_id
FROM languages
WHERE user_id = :user_id";
$stmt = $this->db->conn_id->prepare($sql);
$stmt->bindParam(':user_id', $user_id);
$stmt->execute();
return $result = $stmt-> fetch();
}
public function languages($result) {
return array_diff_key($this->options, $result);
}
}
および私のビューファイルで(テストのために、コントローラーを実行するときにこれの一部をコントローラーに入れ、リンクを挿入して言語を削除し、データベースからテーブルを削除します)。
$mylang = $this->Options_model->my_lang($user_id);
print_r($mylang);
foreach ($mylang as $value) {
echo "Value: $value<br />\n";
}
$options = $this->Options_model->languages($mylang);
echo form_dropdown('languages', $options);
私のデータベースは次のように構成されています:
| id | user_id | lang_id |
|------------------------|
| 1 | 12 | en |
|————————————————————————|
$myLang 変数を返そうとしたときに得られるのは「配列」だけです。array_diff_key 関数を機能させることができず、print_r が想像したようにまったく見えません。グラフィックデザインのコンフォートゾーンに戻って、このバックエンドの頭痛を解消したいだけです。これを行う簡単な方法はありますか?または、ばかのように見えずにユーザーオプションをどのようにコーディングすればよいですか?