1

より多くの言語で記事を読み込むオプションをユーザーに提供しようとしています。ユーザーが選択していない利用可能な言語のリストを表示しようとしており、ユーザーがオプションから削除できるように、既に選択されている言語を選択しています。

これが私がこれまでに得たものです:

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 が想像したようにまったく見えません。グラフィックデザインのコンフォートゾーンに戻って、このバックエンドの頭痛を解消したいだけです。これを行う簡単な方法はありますか?または、ばかのように見えずにユーザーオプションをどのようにコーディングすればよいですか?

4

1 に答える 1

1

私はPDOにあまり詳しくありませんが、次の行だけでなくすべての言語を取得するため、fetchの代わりにfetchAll()を使用する必要があると思います。また、FETCH_COLUMNモードを使用するように指示することもできます。

return $result = $stmt->->fetchAll(PDO::FETCH_COLUMN, 0);

これにより、期待どおりにすべての言語の配列が返されます。これにより、array_diff_keyを実行できるようになります。

于 2012-11-15T16:41:35.733 に答える