[FuelPHP] DBクラスの結果を1次元連想配列に変換する方法

多次元連想配列で返ってくるのはありがたいんだけれど、取得するカラムが2つだった時に1次元で返して欲しかったので色々したメモ。

#前提

FuelPHPのDBクラスで結果は連想配列で取得できる。(デフォルト)

#DBクラスを使う

DBクラスを使ってテーブルの値を取得する。

$result = DB::select('user_id','user_name')->from('users')->execute();

$result_array = $result->as_array();

Debug::dump($result_array);

#取得結果

取得した結果は以下のような感じの構成になっているはず。

array(
   array(
       'yamada' => '山田奈緒子'
   ),
   array(
       'ueda'   => '上田次郎'
   ),
   array(
       'yabe'   => '矢部謙三'
   )
);

個人的にこんな感じで欲しかったのでFuelPHPのクラスを使って

array(
  'yamada' => '山田奈緒子',
  'ueda'   => '上田次郎',
  'yabe'   => '矢部謙三'
);

#取得

Arrクラスのassoc_to_keyvalを使う

$result = DB::select('user_id','user_name')->from('users')->execute();

$result_array = $result->as_array();

$result_array = Arr::assoc_to_keyval($result_array, 'user_id', 'user_name');

これで意図した配列になった。


assoc_to_keyvalはkeyの添字とvalueの添字を指定しないといけない。ここではDBクラスから取得してきた連想配列なのでテーブルのカラム名(物理)になっているのでそれを指定してやる必要がある。
これの指定をミスると空ぶってしまうのでDBクエリでエイリアスを指定してやるとミスが減るかもしれない。

DB::select(array('user_id','namae'))->from('users')->execute();

#追記

Kenji_s – 『[FuelPHP] DBクラスの結果を1次元連想配列に変換する…』 へのコメント

execute()->as_array(キー) でok

2014/10/29 13:31 にブックマーク

#execute()->as_array(キー)を使う

hatenaにてid:Kenji_sさんから「execute()->as_array(キー) でok」というコメントを頂いたのでas_array(キー)で確認してみました。

$result = DB::select('user_id','user_name')->from('users')->execute()->as_array('user_id','user_name');

前述と同じく意図した配列がスマートに取得できた。今後はこの方法でやることにした。

Kenji_sさん、ありがとうございました。ちなみに昔「はじめてのフレームワークとしてのFuelPHP」拝読しました(_ _)㎜