配列型

今回はデータ型の中の複合型に属している配列について説明していきます。配列はスカラー型と同様に使う場面が多く、非常に便利なのでよく理解しておきましょう。

配列には複数の値を1つの変数に

今まで1つの変数に1つしか値を入れてきませんでしたが、実は入れられる値は1つだけではありません。イメージ的には1つの変数にたくさんの変数が入っている感じです。ただし、たくさんの変数は変数ではなく要素と呼ばれるものです。基本的にはこの要素には名前がないので、呼び出す時はインデックスという、それぞれの要素に付けられる番号を使います。
使い方を実際の簡単なコードを用いて説明します。

$color = array('white', 'black', 'red', 'blue', 'yellow');//色の種類を1つの変数にまとめている

$person1 = array('佐藤', '男', '学生');
$person2 = array('鈴木', '女', '教師');  //それぞれの人物の情報をまとめている

変数にarray(値1,値2)といった値が入れられてますね。見ての通り、配列はarray()の中に複数の値を「,」で区切って入れて作ります。このようにたくさん値があるけど1つずつ変数を作るのが大変だけどグループに分けることができたり1つにまとめると使いやすい時に使用します。

インデックスで参照する

1つの変数に複数の要素を入れましたが、インデックスという番号が割り振られていると説明しましたね。実際に取り出してみましょう。

<?php
$person1 = array('佐藤', '男', '学生');
print "{$person1[0]}さんの職業は{$person1[2]}です。" //佐藤さんの職業は学生です。と表示される
?>

まず、何番目の要素を取り出すか指定する際は変数名の次に「 [0] 」というように番号を[]で囲って指定します。そして、1つ目の要素の名前を取り出すとき、1ではなく0を使っているのにお気づきでしょうか。このように要素のインデックスは0から始まります。0から始まりますので3番目の要素を取り出す時は0,1,2と数えるので、[]の中に2を記述しました。

ブラケットを使って配列を作成する

先程までは単なる変数に、要素に入れる値をまとめて代入し、配列を作成してましたが、1つずつ入れたい場合があります。そんな時はブラケット構文というものを使って値を0から順番に、あるいはインデックスを指定して代入します。変数の直後に記述されている「[]」がブラケットです。

<?php
//インデックス0から順番に自動的に入れる
$person[] = '佐藤';
$person[] = '男';
$person[] = '学生';

//インデックスを指定して値を代入する
$person[1] = '男';
$person[2] = '学生';
$person[0] = '佐藤';
?>

配列に入れたい値が決まってなく、とある処理を繰り返し行う際、その処理1回ずつに配列に値を入れていきたい時などに使えますね。

インデックスではなく名前を付ける連想配列

インデックスという番号を割り振って使用するだけでなく、インデックスの代わりに名前を付けられたら名前と値を紐付けることで、便利で分かりやすくなりますね。

そこで、その名前にあたるキーというものをインデックスの代わりに付けます。作り方は以下のコードをご覧下さい。

<?php
$person = array(
'佐藤' => '20歳',
'鈴木' => '26歳',
'高橋' => '18歳',
'山本' => '35歳'
);

print $person['鈴木']; //26歳と出力される
?>

‘キー名’を記述し、その後ろに「=>」とあります。この矢印っぽいので値と対応させています。もちろんその次に値を記述し、次の要素がある場合はカンマで区切ってまた次の要素をキー名から記述します。こうすることで配列personから、今回ですと名前のキー名を指定することで取り出すことができます。

ブラケットを利用する場合も、インデックスがキー名に替わるだけですので簡単です。

$person['五所川原'] = '48歳';

要素を削除したい

例えば処理の中で取り出したらいらない、消えてほしいという場合は削除することもできます。インデックスまたはキー名を指定して削除する場合は以下のように記述します。

unset($person[1]);

また、整数値を使用するキー、あるいはインデックスの場合は間に抜けている番号を詰めて再構築することが可能です。その方法は以下のとおりです。

$person = array_values($person);

無いインデックスやキー名を指定するとエラー

当然ですが、配列の中に削除してあったり元々存在しない要素を指定し、出力したり他の変数に代入しようとすると定義されていないよとエラーになりますので配列の中の要素を削除する処理を作成する場合は注意が必要です。

<?php
$person = array(
1=> '20歳',
2 => '26歳',
3 => '18歳',
4 => '35歳'
);
unset($person[1]);
print $person[1]; //Notice: Undefined offset : 1と表示されエラーとなる
?>

配列の中に配列を作る

ちょっとややこしくなりますが、これもよく使うので覚えておきましょう。
配列の要素には配列型も使用できます。つまり、見出しの通り配列の中に配列が作れます。これを多次元配列と呼びます。
以下のコードを確認してみます。

<?php
$people = array(
    array(
        '名前' => '佐藤',
        '年齢' => '20歳',
        '職業' => '学生'
    ),
    array(
        '名前' => '鈴木',
        '年齢' => '26歳',
        '職業' => '教師'
    ),
    array(
        '名前' => '山本',
        '年齢' => '35歳',
        '職業' => 'システムエンジニア'
    )
);

print $people[0]['名前']; //佐藤
print $people[0]['年齢']; //20歳
print $people[0]['職業']; //学生

?>

先にコードを見てもらいましたが、出力してる箇所を見てみると以下の通りになっているのが分かりますね。

  • 配列peopleの中の0番目の要素を取り出す
  • 0番目の要素の配列のキー名「名前」の要素を取り出す
  • キー名「名前」の要素の値は佐藤なので、「佐藤」が出力される。

配列の中に配列を作ると言葉だけで言えば少し難しいかもしれませんが、紐解いていくと理解しやすいと思います。

多次元配列に連想配列を入れる。

配列の中の配列を連想配列にしちゃいましょう。インデックスだとわかりにくい場合キー名を付けてあげれば分かりやすいものになることは学習しましたね。

以下のように記述します。

<?php
$name = '佐藤';
  $people = array(
      '佐藤' => array(
          '住所' => '東京',
          '年齢' => '20歳',
          '職業' => '学生'
      ),
     '鈴木' => array(
          '住所' => '大阪',
          '年齢' => '26歳',
          '職業' => '教師'
      ),
      '山本' => array(
          '住所' => 'カリフォルニア',
          '年齢' => '35歳',
          '職業' => 'システムエンジニア'
      )
  );

  print $name.'さんは'.$people[$name]['住所'].'に住んでいる'.$people[$name]['年齢'].'の'.$people[$name]['職業'].'です。';
  //出力結果:佐藤さんは東京に住んでいる20歳の学生です。

  ?>

ちょっと見にくいですが、ここでは配列の使い方に注目し覚えてください。キーに変数を使用するときはそのまま文字列を代入した変数を入れてください。
人物ごとに配列にデータを保存しておきたい場合、上のように多次元配列の中に連想配列を作ればデータをまとめることができ取り出しやすくとっても便利ですね。頭がこんがらがってきた人はもう一度このページで説明している配列の使い方を見直し、ゆっくり紐解いて考えて理解していきましょう。

まとめ

今回は少し長くなってしまいましたが、ゆっくりでいいので自分でコードを書いて試して覚えていきましょう。実際に書いて表示したほうが確実に早く覚えられますので根気よく勉強していきましょう。

  • 配列は複数の要素を1つの変数に格納する
  • 配列の要素にはインデックスという通し番号が割り振られる
  • ブラケット構文を使って指定したインデックス、キー名に値を代入できる
  • インデックスの代わりにキー名を使い連想配列を作成できる
  • キー名 => 値 という形で要素を代入する
  • 無いインデックスやキー名を指定するとエラーになる
  • 配列の中に配列を入れ多次元配列を作成できる

コメント

タイトルとURLをコピーしました