[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();
追記
execute()->as_array(キー)を使う
はてブにて、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');
前述と同じく意図した配列がスマートに取得できた。今後はこの方法でやることにした。