データベースからデータをfetch関数などで取得すると、大体は2次元配列の構造になっています。
この2次元配列の構造から特定データを利用するときに意外と苦戦するので、まとめ書きをしておこうと思います。
データベースから得られる配列の構造
PHPでデータベース操作をする場合に一番多く使われているのはPDOクラスの汎用データベース関数群だと思います。
PDOクラスを利用してデータベースからデータを取得するには、SQL文のSELECT構文を作り、PDOクラスのqueryメソッドを使います。
// SQLiteデータベースからデータを取得 // 初期設定 $dsn = 'sqlite:test.db'; $username = ''; $password = ''; $options = array(); //データベースに接続 $db = new PDO($dsn, $username, $password, $options); //実行するqueryの作成(testテーブルの全データを取得) $query = "SELECT * FROM 'test'"; //クエリを実行 $res = $db->query($query); //取得したデータを全てフェッチする $data = $res->fetchAll(); //データを表示する print_r($data);
最後のprint_rで配列の全てのデータを表示することができます。
例えば、会員ID(id)、名前(name)、年齢(age)をカラムに設定してあるテーブルを考えます。
id | name | age |
test1 | Tanaka | 34 |
test2 | Sato | 55 |
test3 | Yamada | 26 |
このテーブルのデータを上記のコードで取得すると次のように表示されます。
Array ( [0] => Array ( [id] => test1 [0] => test1 [name] => Tanaka [1] => Tanaka [age] => 34 [2] => 34 ) [1] => Array ( [id] => test2 [0] => test2 [name] => Sato [1] => Sato [age] => 55 [2] => 55 ) [2] => Array ( [id] => test3 [0] => test3 [name] => Yamada [1] => Yamada [age] => 26 [2] => 26 ) )
1行目のデータが配列の第1要素として取得され、その中に連想配列と添字配列の形式でそれぞれのデータが格納されます。
この配列構造を2次元配列と言います。
データベースから取得したデータをカラムごとに整理する方法
通常はデータベースから取得したデータはテーブルの行ごとに処理されることが多いのですが、テーブルのカラムごとに処理したいという場合もあります。
先ほどのテーブルで言うと、例えばidのカラムだけを取り出して配列操作を行いたい場合です。
id |
test1 |
test2 |
test3 |
こういう場合にはarray_columnを使います。
array_columnは多次元配列の中の要素から特定のキーに該当するデータを配列として取り出す関数です。
array_column ( array $array , $column_key [, $index_key = null ] )
$array はカラムを取り出す元の配列を指定します。
$column_key は取り出したいカラムの名称(キー)を文字列で指定します。
$index_key は取り出しの際に並べ替えを行うオプションです。必要がなければ指定する必要はありません。
これを使って先ほどデータベースから取り出した$dataのidだけを抽出するには次のようにします。
// $data からidに該当するカラムのみを取り出す $id = array_column($data, 'id'); // 取り出したカラムの配列を表示 print_r($id);
次のように表示されます。
Array ( [0] => test1 [1] => test2 [2] => test3 )
idだけを抽出して配列として作りなおすことができました。
ここからは通常の配列として操作すれば希望通りの処理を行うことができます。
私の場合はwebアプリケーションの設定情報の操作に利用しています。
array_columnの詳細は公式ページを参照して下さい。