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

3 min read

多次元連想配列で返ってくるのはありがたいんだけれど、取得するカラムが 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();

追記

screenshot_2019-01-05 a pen by hiro

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');

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