SHINYA TECH

公務員(行政職)から34歳でエンジニア転職した人

#2 読書ログサービス作成(テキスト版)その2

f:id:kshinya-tech:20220208163802p:plain

やったこと

  • 独学エンジニア レッスン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' => '人生の礎となる一冊。',
  ),
)

参考にしたサイト

www.sejuku.net