array(1){
[0]=>array(4)
{
["login_id"]=>string(7) "abcdefg"
[0] =>string(7) "abcdefg"
["user_name"]=>string(5) "abcde"
[1] =>string(5) "abcde"
}
}
配列をvar_dumpした時にこのような文が表示されたのですが、表にした時にどのように配置されているのかがイメージできません。教えて頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/06 03:11
回答6件
0
自分なりに理解することが出来ました。
本当にありがとうございました。
たくさんの方に回答していただき、皆さんにベストアンサーしたいんですが、1つしかできないため、馬鹿の私にも直感的にわかりやすかった方を選ばせて頂きました。
その他の方の回答のコードも参考にして、勉強していきます。
本当にありがとうございました。また質問する際はよろしくお願いします
投稿2019/12/06 04:01
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
var_dump()などはあくまで配列の内容を確認するために使うものです。
「表」というのが「HTMLのテーブル」のことだとしたら、あくまでそのHTMLを組むための材料のひとつにしかなりません。
配列となっているということはそこからループさせてHTMLを組むことになりますが、やり方を変えてください。
表示させるデータを固定値としてHTMLを先に組んで完成形のイメージを持ってください。「モック」というものです。「プロト」と呼ばれている現場もあります。要は「試作品」ですね。
このモックが基盤となり「どこにどの情報を当て込むか」を決めていきます。そのときに初めてvar_dump()で得られた情報が役に立ちます。
配列のキーを指定すれば値を参照できるので、ループさせながら当て込むと決めた情報を入れて出力するだけです。
ですので、まずモックを作ってください。それが「表にしたときなどのように配置"させるか"」のイメージとなります。
投稿2019/12/06 03:18
総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/06 03:46
2019/12/06 05:15
2019/12/06 05:22
0
それで分からないなら代わりにvar_exportを使うといいのではないでしょうか?
(こちらなら、PHPの表現になる)
投稿2019/12/06 02:41
総合スコア1305
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/06 03:02
2019/12/06 03:25
2019/12/06 03:35
退会済みユーザー
2019/12/06 03:52
0
ベストアンサー
投稿2019/12/06 03:44
総合スコア239
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/06 03:49
退会済みユーザー
2019/12/06 03:50
退会済みユーザー
2019/12/06 03:53
2019/12/06 04:13 編集
0
これは
PHP
1<?PHP 2$rows=[ 3 [ 4 "login_id"=>"abcdefg", 5 0=>"abcdefg", 6 "user_name"=>"abcde", 7 1=>"abcde", 8 ], 9 ]; 10var_dump($rows);
という状態で、おそらくDBからデータを抜き出したんですよね?
ASSOCで抜き出さないと、カラム名とカラムの順番(列番号)で同じデータが抜き出されます
$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
表作成
もし、$listがfetchAll(PDO::FETCH_ASSOC)で得られたデータならこうしてください
PHP
1<?PHP 2$list=[ 3 [ 4 "login_id"=>"abcdefg", 5 "user_name"=>"abcde", 6 ], 7 ]; 8 9print "<table border>"; 10print "<thead>"; 11print "<tr>"; 12print implode("",array_map(function($x){return "<th>".htmlspecialchars($x)."</th>";},array_keys($list[0]))); 13print "</tr>"; 14print "</thead>"; 15print "<tbody>"; 16foreach($list as $row){ 17print "<tr>"; 18print implode("",array_map(function($x){return "<td>".htmlspecialchars($x)."</td>";},$row)); 19print "</tr>"; 20} 21print "</tbody>"; 22print "</table>";
投稿2019/12/06 03:06
編集2019/12/06 03:31総合スコア116661
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/06 03:11
2019/12/06 03:14 編集
退会済みユーザー
2019/12/06 03:23
2019/12/06 03:26
退会済みユーザー
2019/12/06 03:27
2019/12/06 03:32
0
var_dump()の出力は、データ型やサイズも伴ったもので情報量が多いですね。
構造がわかりにくいというのであれば、
var_export()を使えば、
phpでの文法通り出力されるので、ある意味わかりやすくなります。
0=>arrayの意味が分からない
配列の値として、配列を持っている状態です。
つまり、配列の、配列。
(二次元配列ではありません、あくまで、配列を抱える配列です。)
なぜlogin_idとuser_nameの他に0=>と1=>があるのか
fetchAll()でデータ取得したのかなと察しますが、
説明上、仮に$rows = $stmt->fetchAll();
などとしたものとすると、
$rows[0]
や$rows[1]
などでレコード単位(行単位)のデータにアクセスでき、
その行が持つデータにアクセスするために
$rows[0]['login_id']
や$rows[0]['user_name']
で、
あるいは$rows[0][0]
や$rows[0][1]
でレコード内のカラムにアクセスできる構造です。
クエリー実行したときのSELECT文の書き方次第です。
他の方の回答にあるように、カラム名称でも、0から始まる数値でも、
カラムごとのデータにアクセスできるようになっていますので、
お好きな方法をお使いください。
PHPでデータベースに接続するときのまとめ - Qiita
を参考に全容を書き出すと、
php
1try { 2 3 /* リクエストから得たスーパーグローバル変数をチェックするなどの処理 */ 4 5 // データベースに接続 6 $pdo = new PDO( 7 'mysql:dbname=testdb;host=localhost;charset=utf8mb4', 8 'root', 9 '', 10 [ 11 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 12 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 13 ] 14 ); 15 16 /* データベースから値を取ってきたり, データを挿入したりする処理 */ 17 $stmt = $pdo->prepare('SELECT login_id, user_name FROM accounts WHERE login_id = :id'); 18 $stmt->bindValue(':id', $login_id, PDO::PARAM_INT); 19 $stmt->execute(); 20 21 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 22 /* 行ごとに取得したデータを出力する。表組みしたければtr,th,td要素を駆使すること。 */ 23 echo $row['login_id'] . PHP_EOL; 24 echo htmlspecialchars($row['user_name'], ENT_QUOTES, 'UTF-8') . PHP_EOL; 25 } 26 27} catch (PDOException $e) { 28 29 // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する 30 // - もし手抜きしたくない場合は普通にHTMLの表示を継続する 31 // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい 32 header('Content-Type: text/plain; charset=UTF-8', true, 500); 33 exit($e->getMessage()); 34 35}
あくまで机上のコードなので、エラー出たらごめんね。
prepareしてbindValueしてexecuteしてから、
例えば行単位で取得するのにfetch()を使う事例のつもり。
投稿2019/12/06 02:40
編集2019/12/06 03:52退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/06 03:02
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。