配列

目次
  • 解説
  • 1. 学習の準備
  • 2. 配列とは
  • 3. 配列の作成と代入
  • 4. 配列の要素と添字
問題に挑戦!
進捗を変更する




解説

1. 学習の準備


下表のとおり学習用のクラスを作成して、その中にmainメソッドを作っておきましょう。

ファイル名ArrayAndLoop.php
クラス名ArrayAndLoop

2. 配列とは


配列とは複数の変数をまとめて扱えるようにする仕組みです。

例えば3つのケーキを売っているお店で、それぞれ1日に売れた数を数えるプログラムを作る場合には、ケーキごとに数を数えるために数値型の変数が3つ必要になります。

$sellCounterStrawberryShortCake = 0;
$sellCounterChocolateCake = 0;
$sellCounterNewYorkCheeseCake = 0;

// 売れたケーキの情報をレジなどから随時受け取る何らかの処理
// $cakeNameがケーキの名前、$sellCountが売れた数とする
// ~~~

// 情報を受け取る度に販売数を加算する処理
switch($cakeName) {
    case 'StrawberryShortCake':
        $sellCounterStrawberryShortCake += $sellCount;
        break;
    case 'ChocolateCake':
        $sellCounterChocolateCake += $sellCount;
        break;
    case 'NewYorkCheeseCake':
        $sellCounterNewYorkCheeseCake += $sellCount;
        break;
}

これではケーキの種類が増える度に、変数とcase文を増やす必要があり、どんどん長く複雑なプログラムになってしまいます。

そこで、配列の登場です。配列はひとつの変数の中をいくつかに区切って、それぞれが変数として機能するようにしたものです。次のサンプルコードのように使うことができます。ブラウザから「http://localhost/php_basic/ArrayAndLoop.php」を確認しましょう。

    static function practiceArray() {
        $sellCounter = [0, 0, 0]; // 配列型の変数を作成

        $sellCounter[0] += 10; // 区切られた0番目に10を加算
        $sellCounter[1] += 20; // 区切られた1番目に20を加算
        $sellCounter[2] += 30; // 区切られた2番目に30を加算

        Logger::echo($sellCounter[0]); // それぞれの「変数」で
        Logger::echo($sellCounter[1]); // 加算した値を
        Logger::echo($sellCounter[2]); // 保持できている
    }
[2020/12/31 12:34:56] 10
[2020/12/31 12:34:56] 20
[2020/12/31 12:34:56] 30

3. 配列の作成と代入


配列の作成は以下のように行います。

$array = [];

作成時に区切られた変数それぞれに値を代入する場合には、以下のようにします。

$array = [10, 20, 30];

4. 配列の要素と添字


区切られた変数ひとつひとつのことを要素(ようそ)と呼び、要素後から追加・削除することができます。count関数を使用し、引数に配列を指定することで要素数を取得することもできます。

各要素に代入や参照を行う場合には、何番目の要素であるかを示す添字(そえじ)を「[]」内に指定します。なお、この添字0から始まることに注意しましょう。

添字の指定には変数も使用できます。

ケーキ販売数カウント処理の例は、売れたケーキの名前ではなく番号を受け取る仕組みにすることで、switch文を使わずにたった1行でケーキごとの加算処理が可能となります。

// 配列でカウンターを作成
$sellCounter = [0, 0, 0];

// 売れたケーキの情報をレジなどから随時受け取る何らかの処理
// cakeIndexがケーキの番号(0~2)、sellCountが売れた数とする
~~~

// 情報を受け取る度に販売数を加算する処理
$sellCounter[$cakeIndex] += $sellCount;

問題

確認問題


確認問題

この中で配列の説明として正しくないものはどれか?