やったこと
- 独学エンジニア レッスン4.18-22
- 配列
- 前回書いたコードでは読書ログを複数登録できない。(上書きされる)
- そこで、配列を使って複数の値を格納できるようにした。 shinya-tech.com
学んだこと
配列の基本操作
1.配列を初期化する
$配列名 = [値1, 値2, 値3];
2.配列に要素を追加する
$配列名[] = 値;
3.配列の要素にアクセスする
$配列名[キー番号]
キー番号は、値が入っている順に0から順に整数が割り振られる。
配列の例
// 配列の初期化 $arr =[1, 2, 3]; // 要素の追加 $arr[] = 4; // 要素へのアクセス echo $arr[0] . PHP_EOL; //「1」と表示される echo $arr[3] . PHP_EOL; //「4」と表示される。
配列の中身を知りたいときは…
var_export(配列名)
を使う。
var_dump
は型と値をセットで表示してくれるのに対して、
var_export
は値だけ出力してくれる。
var_export($arr);
連想配列とは...
配列で値にラベルを付けたいときは連想配列を使う。
配列の要素に名前をつけたものが連想配列。
連想配列の基本操作
連想配列も配列と同様、初期化→要素の追加→要素へのアクセス
が基本操作となる。
1.連想配列を初期化する
$配列名 = [ キー1 => 値1, キー2 => 値2,・・・ ];
2.連想配列に要素を追加する
$配列名[キー名] = 値;
3.連想配列の要素にアクセスする
$配列名[キー名]
連想配列を使った例
// 初期化 $capital = [ 'Japan' => 'Tokyo'; 'China' => 'Beijing'; ]; // 要素の追加 $capital['India'] = 'New Delhi'; // 要素へのアクセス echo $capital['Japan'] . PHP_EOL; // 「Tokyo」と表示される
PHPでは配列と連想配列は区別されない(同じ扱い)
配列
- キーに数字を使う
- キーなしで配列を定義すると、自動的に0から始まる連番をキーとしてつける
- 同じ種類の値を順序立ててまとめるのに向いている
連想配列
- キーに文字列を使う
- 同じグループだが、属性の異なる値についてラベルを付けてまとめるのに向いている
今日書いたコード
<?php // 変数を初期化 $title = ''; $author = ''; $status = ''; $score = ''; $summary = ''; // 配列を初期化 $reviews = []; while (true) { echo '1. 読書ログを登録' . PHP_EOL; echo '2. 読書ログを表示' . PHP_EOL; echo '9. アプリケーションを終了' . PHP_EOL; echo '実行したい番号(1,2,9)を入力してください:'; $i = trim(fgets(STDIN)); if ($i === '1') { // 読書ログを登録する echo '読書ログを登録してください' . PHP_EOL; echo '書籍名:'; $title = trim(fgets(STDIN)); echo '著者名:'; $author = trim(fgets(STDIN)); echo '読書状況(未読、読んでいる、読了):'; $status = trim(fgets(STDIN)); echo '評価(5点満点の整数):'; $score = trim(fgets(STDIN)); echo '感想:'; $summary = trim(fgets(STDIN)); // 連想配列の各キーに上記にて変数に代入された値を格納していく。 $reviews[] = [ 'title' => $title, 'author' => $author, 'status' => $status, 'score' => $score, 'summary' => $summary, ]; echo '登録が完了しました' . PHP_EOL . PHP_EOL; } elseif ($i === '2') { // 読書ログを表示する echo '読書ログを表示します' . PHP_EOL; echo '書籍名:' . $title . PHP_EOL; echo '著者名:' . $author . PHP_EOL; echo '読書状況:' . $status . PHP_EOL; echo '評価:' . $score . PHP_EOL; echo '感想:' . $summary . PHP_EOL . PHP_EOL; } elseif ($i === '9') { break; } } var_export($reviews);
array ( 0 => array ( 'title' => 'シンヤの冒険', 'author' => 'シンヤ’, 'status' => '読了', 'score' => '1', 'summary' => 'ただの自暴自棄な主人公の物語。読む価値無し。', ), 1 => array ( 'title' => '深夜の冒険', 'author' => 'ミッドナイト太郎', 'status' => '読了', 'score' => '5', 'summary' => '人生の礎となる一冊。', ), )