LoginSignup
2
1

More than 5 years have passed since last update.

【PHP】配列や連想配列が覚えづらかったので学校に例えてみた【初心者向け】

Posted at

配列を小学校に例えてみることにしました。

※わかりやすさ重視でいろいろ説明をはしょっています。

ブログでも書いています。-> PHP配列を学校に例えてみた

PHPの配列の使い方〜わかりやすさ重視〜

『PHP』に限らず、ほとんどのプログラミング言語には、『変数』という機能があります。

『変数』というのはざっくりいうと『箱』の事で、

『箱』をつくって、その中に好きな文字や数字を入れて、取り出しやすくしたものです。

※『PHP』の『変数』は、頭に ドルマークが必要になります。

例えばとある学校の、1組をプログラムで表したいとしたら、

$seito_1 = '本田';
$seito_2 = '香川';
$seito_3 = '長友';

と書いたとして、

echo $seito_1

と書くと、『本田』と表示されます。

ただこの書き方だと、

例えばクラスに30人もいたら変数だらけになってしまいます。

なので、1つの箱にまとめて要素をつっこめる方法があります。

それが『配列』です。

例えば $seitoという変数(箱)をつくって、その中にまとめて生徒の名前を追加します。

$seito = ['本田','香川','長友','乾','大迫'];

という形で、 変数(箱)に入れる値を、[]で囲みます。

呼び出す時には、

print_r($seito[2]);

とすると、長友くんが呼び出されます。

あれ?長友くんは3番目じゃないの?

と思いがちですが、プログラミングは0から数える
事が多く、配列も0から数えるつくりになっていますので、

1,2,3,4,5 ではなく、

0,1,2,3,4 の番号で指定する形ですね。

PHPの連想配列と多次元配列の使い方〜小学校のクラスが複数あったら

1組だけでなく、2組も把握したいんだけどどうしたらいい?

小学校であればもちろん、2組や3組がある学校もありますよね。

そんな場合でも役に立つのが『配列』です。

実は、『配列』の中にさらに『配列』を入れ子にすることができます。
(多次元配列といったりします。)

コードにするとこんな感じです。

$seito = [
    '1kumi' => [
        '本田','香川','長友','乾','大迫'
    ],
    '2kumi' => [
        '川島','柴崎','槙野','長谷部','酒井'
    ]
];

$seito という変数(箱)の中に, 1組と2組で分けて、それぞれ生徒の名前をまとめています。

2組の2番目の人を呼び出す時はこうやって指定すると、

print_r($seito['2kumi'][1]);

柴崎くんが呼び出されます。

print_r($seito['2kumi'][2]);

にすると、槙野くんですね。

PHP 配列(添字配列)と連想配列の違い

$seito という変数の後に、 ['2kumi'] という文字と、[1] という文字を指定していますが、

PHPでは、

配列の中のどの場所?

というのを指定するために、文字や数字を使うことができます。

  • 配列のキーが数字:配列(添字配列)・・指定なしならこちら
  • 配列のキーが文字:連想配列・・文字から内容を連想しやすい

指定しないと自動的に0から数字が割り振られます。

PHPの連想配列と多次元配列〜小学校の学年が複数あったら

これまでは1学年だけを例にしていましたが、

小学校となると1年生だけではなく、2年生もいますよね。

勘のいい人ならわかると思いますが、

配列の中に配列を入れる事で、学年も表現できます。

コードはこんな感じ。

$seito = [
    '2nen' => [
        '1kumi' => [
            '遠藤','内田','松井','岡崎','中村'
        ],
        '2kumi' => [
            '今野','駒野','大久保','楢崎','闘莉王'
        ]
    ],
    '1nen' => [
        '1kumi' => [
            '本田','香川','長友','乾','大迫'
        ],
        '2kumi' => [
            '川島','柴崎','槙野','長谷部','酒井'
        ]
    ]
];

新たに 2nen や 1nen という項目が増えましたが、その中身は前のコードと同じですね。

例えば2年2組の闘莉王くんを呼び出す時はこんな感じで指定します。

print_r($seito['2nen']['2kumi'][4]);

簡単ですね。

これを応用すれば、

例えば30人のクラスがあって、3組あって、6年生まであったとしたら、

30×3×6 = 180 人分の情報になりますが、

『配列』をうまく使えば、

1つの『変数』に180人分の情報をまとめることができます

配列パワーすごい←(語彙力

また、配列は何段階も作ることができます。例えば・・

PHPの連想配列と多次元配列〜小学校が複数あったら

仮に熊本小学校と、福岡小学校があったとしたら、

熊本小学校の、
2年の、
1組のだれだれ、

というのも1つの変数(箱)の中に入れることができます。

$seito = [
    'fukuoka' => [],
    'kumamoto' => [
        '2nen' => [
            '1kumi' => [
                '遠藤','内田','松井','岡崎','中村'
            ],
            '2kumi' => [
                '今野','駒野','大久保','楢崎','闘莉王'
            ]
        ],
        '1nen' => [
            '1kumi' => [
                '本田','香川','長友','乾','大迫'
            ],
            '2kumi' => [
                '川島','柴崎','槙野','長谷部','酒井'
            ]
        ]
    ]
];

呼び出しはこんな感じ。

print_r($seito['kumamoto']['2nen']['1kumi'][2]);

これで松井君が呼び出せます。(fukuokaの方ははしょってますがこれでも動きます。)

PHP連想配列の覚え方〜補足

名前だけじゃなくて、年齢や性別、クラブ活動なんかも登録できるの?

という場合ももちろんできます、配列ならね。

コードはこんな感じです。

$seito = [
    0 => [
        'name' => '本田',
        'age' => '7' 
    ],
    1 => [
        'name' => '香川',
        'age' => '6' 
    ],
];

呼び出しはこう。

print_r($seito[1]['age']);

1番目のage(年齢) なので 6 と表示されます。

もちろん数字ではなく、文字でも指定できます。

$seito = [
    'honda' => [
        'name' => '本田',
        'age' => '7' 
    ],
    'kagawa' => [
        'name' => '香川',
        'age' => '6' 
    ],
];

呼び出しはこう。

print_r($seito['kagawa']['age']);

読む分にはこっちの方がわかりやすいかもですね。

PHPの連想配列・多次元配列〜実際のプログラミングでは

実際に小学校の情報をプログラミングで管理しようと思ったら、

生徒達の情報をPHPコードで直書きするのではなく、

Mysqlなどのデーターベースを使って情報を登録しておいて、

PHPからデータベースにつないで情報を表示する、という形になるかと思います。

指定の仕方も変数をいれることが多いので、こういった文字列になるかなと思います。

$seito[$gakko][$gakunen][$kumi][$number]

プログラミング的には数字の方がやりやすいので、

$seito[1][2][0][2]);

というような形を想定しつつプログラミングを組んだりします、が、

カッコばかりで読みづらいなぁ・・

なんて思ったりすることもあるので、その場合は配列の中身を整理してみるといいかもですね。

まとめ PHPの配列や連想配列・多次元配列について

実はこの記事は、 #入江開発室 の #voyage というWebアプリケーションのソースコードを見ていた時に、

配列の理解が浅いなと思ったことがきっかけで、まとめてみることにしました。

PHPに限らずプログラミングの規模が大きくなるにつれ、

配列・連想配列・多次元配列は必須になるので、

ぜひしっかり把握した上で、プログラミングライフを楽しみたいものですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1