SHINYA TECH

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

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

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

やったこと

  • 独学エンジニア レッスン4.23-24
  • foreach文
  • 前回、複数の読書ログを登録できるようにしたが、表示も複数できるようにした。 shinya-tech.com

学んだこと

配列・連想配列の全要素をループするときはforeachを使う。

foreach

  • 配列の全要素それぞれに対して繰り返し処理を行う
    • 配列・連想配列の全要素に繰り返し処理をしたいときに向いている
foreach ($配列名 as $要素名) {
    // 繰り返したい処理
}
  • 連想配列の各要素をforeachで繰り返し処理したいとき
foreach ($配列名 as $キー名 => $要素名) {
    // 繰り返したい処理
}

foreachのサンプルコード

配列

$numbers = [1, 2, 3, 4, 5];

foreach ($numbers as $number) {
    echo $number * 2 . PHP_EOL;
}
2
4
6
8
10

連想配列

$currencies = [
    'japan' => 'yen',
    'us' => 'dollar',
    'england' => 'pound',
];

foreach ($currencies as $country => $currency) {
    echo $country . ':' . $currency . PHP_EOL;
}
japan:yen
US:dollar
england:pound

今日書いたコード

<?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;
        foreach ($reviews as $review) {
            echo '書籍名:' . $review['title'] . PHP_EOL;
            echo '著者名:' . $review['author'] . PHP_EOL;
            echo '読書状況:' . $review['status'] . PHP_EOL;
            echo '評価:' . $review['score'] . PHP_EOL;
            echo '感想:' . $review['summary'] . PHP_EOL;
            echo '-----------------' . PHP_EOL;
        }
    } elseif ($i === '9') {
        break;
    }
}