$query = $this->db->query($sql, $params);
$result = $query->fetchAll();
このfetchAll()
の中身によって配列の形が異なる。
なにもなし または PDO::FETCH_ASSOC
array
0 =>
array
'code' => string '1' (length=1)
'number' => string '2' (length=1)
'number_2' => string '' (length=0)
1 =>
array
'code' => string '123A-R' (length=6)
'number' => string '3' (length=1)
'number_2' => string '' (length=0)
2 =>
array
'code' => string '99999' (length=5)
'number' => string '4' (length=1)
'number_2' => string '1' (length=1)
これを最初のカラム(code
)の値でくくってあげたかったけど迷子になってしまったので議事録。
PDO::FETCH_COLUMN|PDO::FETCH_GROUP
array
1 =>
array
0 =>
array
'number' => string '2' (length=1)
'123A-R' =>
array
0 =>
array
'number' => string '3' (length=1)
99999 =>
array
0 =>
array
'number' => string '4' (length=1)
これでいけると思ってたのに、なぜか2つめのカラムの情報が落ちちゃった。。なぜ???
空かどうかとか関係あるのかな????
PDO::FETCH_COLUMN
array
0 => string '1' (length=1)
1 => string '123A-R' (length=6)
2 => string '99999' (length=5)
PDO::FETCH_GROUP
array
1 =>
array
0 =>
array
'number' => string '2' (length=1)
'number_2' => string '' (length=0)
'123A-R' =>
array
0 =>
array
'number' => string '3' (length=1)
'number_2' => string '' (length=0)
99999 =>
array
0 =>
array
'number' => string '4' (length=1)
'number_2' => string '' (length=0)
やりたかったのはこれ。
(ほんとは、2階層目の0も要らないから省きたいんだけど)
http://php.net/manual/ja/pdostatement.fetchall.php
PHPのマニュアル読んだけどよくわからなかった・・・ちゃんと調べなきゃー
追記
コメントいただいている内容です。
(ほんとは、2階層目の0も要らないから省きたいんだけど)
上記への対応方法
$result = array_map('current', $query->fetchAll(PDO::FETCH_GROUP));
結果
array
1 =>
array
'number' => string '2' (length=1)
'number_2' => string '' (length=0)
'123A-R' =>
array
'number' => string '3' (length=1)
'number_2' => string '' (length=0)
99999 =>
array
'number' => string '4' (length=1)
'number_2' => string '' (length=0)
やりたいことができました!ありがとうございます!!
最後に一言
後から自分の記事を見直すと例に使っているコードもデータも結果の書き方もすごくわかりにくいですね。次に活かします。