10日で覚えるPHPのキソ 第 3 回 配列(連想配列)
PHPのキソ(超基礎編)第 3 回は、配列と連想配列についてお話します。
変数同様、目に見えないものなので、まずは頭の中でイメージする練習から始めましょう。
配列とは?
変数のイメージは箱でした。
配列は、変数のような箱が連なったものをイメージしてください。
「タンス」でも「連なったティッシュ箱」でもなんでもOKです。
(PHPの技術書によって、箱が縦に積み上がっていたり、箱が横に連なっていたりしますが、表現したい事は一緒です。)
変数と配列の違い
前回、変数は1つのデータ(値)しか入れられない!とお話しました。
配列は変数とは違い、つながっている箱の数だけデータ(値)を入れることができます。
- 配列は複数のデータ(値)が入れられる
配列のルール
- 変数と同じく、配列名はドル記号($)から始まります。
配列名に使えるのは、変数と同じく以下の文字になります。(大文字と小文字も区別します。)
- 英大文字小文字(a~zもしくはA~Z)
- 数字(ただし、先頭には使えません。)
- _(アンダーバー)
要素と添字
配列は、変数のような箱が連なったイメージとお話しました。
配列では、その連なった箱1つ1つを「要素」と呼びます。
そして、その要素1つ1つには一意の(同じ値が重複していない)数値が付いています。
その一意の数値が添字(キー)です。
添字(キー)は、要素一つ一つを区別するためにを使います。
(後程出てきますが、添字が数値ではなく文字列になると「連想配列」になります。)
- 要素
配列を構成する1つ1つのデータ(値)を入れる箱のようなもの - 添字(キー)
要素を識別するための一意のもの - 要素1つ1つを指定する時は、$配列名[添字(キー)]
(例えば、$aの0番目(添字番号0)の要素は、$a[0])
配列を作ってみる
配列を作る方法は色々あります。
まずはarray関数を使ってみましょう。
(関数については第 7 回で解説しますが、ここでは「命令するもの」と覚えておいて下さい。)
- array関数を使う(添字指定なし)
$配列名 = array(データ1, データ2, データ3);
(データは、文字列の場合はクォーテーションで囲み、数値は囲みません。)
<?php
$a = array(100, 200, 300);
print_r ($a);
?>
array関数は、「配列をつくりなさい!」という命令です。
print_r関数は「表示しなさい!」という命令です。(以前、printというものがでてきましたね。print_r関数は、配列の中身を表示できます。詳細は用語集のリンクをご覧下さい。)
array関数による命令で配列が作られ、それが$aに代入されています。
さて、ブラウザの表示を見てみましょう。
Array ([0] => 100 [1] => 200 [2] => 300)
配列ができました。
0・1・2というのが、添字(キー)です。
100・200・300が、要素に入ったデータ(値)です。
このように、添字を特に指定しないと、0からの数値が入ります。
型の異なるデータ(値)を1つの配列にすることもできます
<?php
$a = array(100, "PHPのキソ");
print_r ($a);
?>
ブラウザの表示は…
Array ([0] => 100 [1] => PHPのキソ)
添字(キー)を指定して配列を作ることもできます。
- array関数を使う(添字指定)
$配列名 = array(添字1 => データ1, 添字2 => データ2, 添字3 => データ3);
<?php
$b = array(4 => 400, 5 => 500, 6 => 600);
print_r ($b);
?>
ブラウザの表示は…
Array ([4] => 400 [5] => 500 [6] => 600)
添字(キー)を指定することができました。
では次に、配列の要素(箱)に直接データ(値)を入れてみましょう。
配列の要素は、$配列名[添字(キー)]で指定できます。
- 配列に直接代入
$配列名[添字1] = データ1;
<?php
$c[7] = 700;
$c[8] = 800;
$c[9] = 900;
print_r ($c);
?>
結果は次のようになります。
Array ([7] => 700 [8] => 800 [9] => 900)
このような書き方もできます
- 配列に直接代入
$配列名[] = データ1;
<?php
$c[] = 700;
$c[] = 800;
$c[] = 900;
print_r ($c);
?>
結果は次のようになります。
Array ([0] => 700 [1] => 800 [2] => 900)
添字(キー)に何も指定せず、「[]」として代入すると、自動で「0、1、2、3…」と割り振られます。
連想配列とは?
配列のところでも少し触れましたが、連想配列とは、添字(キー)に文字列を用いた配列です。
文字列なので、「"」(ダブルクォーテーション)もしくは「'」(シングルクォーテーション)囲みます。
連想配列を作ってみる
作り方は、添字(キー)の指定の部分以外、配列と同じです。- array関数を使う(添字指定)
$配列名 = array( "添字1(文字列)" => データ1, "添字2(文字列)" => データ2); - 配列に直接代入
$配列名["添字1(文字列)"] = データ1;
<?php
$e = array("one" => 1, "two" => 2);
$e["title"] = "PHPのキソ";
print_r ($e);
?>
ブラウザの表示は…
Array ([one] => 1 [two] => 2 [title] => PHPのキソ)
添字(キー)の型は同じでなくてもOK
添字(キー)の型は、例えば数値と文字列が混在していても大丈夫です。
<?php
$f = array(100, 200, 5 => 500, "ONE" => 1, "PHP" => "たのしい");
print $f[0]."<br />";
print $f[5]."<br />";
print $f["PHP"]."<br />";
print_r ($f);
?>
ブラウザの表示は…
(<br />は、htmlのタグで改行をあらわします。「.」(演算子)を使って連結しています。)
100
500
たのしい
Array ([0] => 100 [1] => 200 [5] => 500 [ONE] => 1 [PHP] => たのしい)
配列の要素の追加
配列は後から要素を追加することができます。
- 配列に直接代入
<?php
// まずは配列を作る
$g = array(10, 20, 30);
// 添字(キー)を指定せずに追加
$g[] = 100;
$g[] = 200;
$g[] = 300;
// 添字(キー)を指定して追加
$g[10] = "ten";
$g[11] = "eleven.";
$g[12] = "twelve";
print_r($g);
?>
ブラウザの表示は…
Array ([0] => 10 [1] => 20 [2] => 30 [3] => 100 [4] => 200 [5] => 300 [10] => ten [11] => elevn [12] => twelve)
$g[] = データ(値)のような代入方法で追加すると、添字(キー)はすでに存在する数値の添字(キー)のあとの数値が自動的に添字(キー)となります。
- array_push関数を使う
array_push関数を使って追加することもできます。
(array_push関数は、配列に追加する命令です。()の中で最初に追加する配列、次に追加する要素の値(データ)を指定します。)
<?php
// まずは配列を作る
$g = array(10, 20, 30);
// 関数を使って、追加。
array_push($g, 100, 200);
print_r($g);
?>
ブラウザの表示は…
Array ([0] => 10 [1] => 20 [2] => 30 [3] => 100 [4] => 200)
もちろん連想配列にも追加できます。
<?php
$g = array(A => 10, B => 20, C => 30);
array_push($g, 400, 500);
print_r($g);
?>
ブラウザの表示は…
Array ([A] => 10 [B] => 20 [C] => 30 [0] => 400 [1] => 500)
配列の中の添字(キー)がすべて文字列の時は、添字(キー)を指定せずに配列を追加すると、添字(キー)は0から始まります。
配列は複数のデータ(値)を入れることが出来ますが、要素の1つ1つは変数と同じく入れられるデータは1つです。
上書きには注意しましょう。
<?php
$d[10] = 1000;
$d[10] = 2000; // ここで上書きされている!
print_r ($d);
?>
表示は次のようになります。
Array ( [10] => 2000 )
配列の要素の削除
配列から特定の要素を取り除くこともできます。
要素の削除には、unsetという関数をつかいます。
- 要素の削除にはunset関数
<?php
// 配列を作ります
$a = array(1 => 100, 2 => 200, 3 => 300, 4 => 400, 5 => 500);
//この時点の$aを表示
print_r($a);
// 見やすいように改行
print "<br />";
// $a[1]を削除
unset($a[1]);
// $a[3]を削除
unset($a[3]);
//この時点の$aを表示
print_r($a);
?>
ブラウザの表示は…
Array ([1] => 100 [2] => 200 [3] => 300 [4] => 400 [5] => 500)
Array ([2] => 200 [4] => 400 [5] => 500)
最初の表示では、要素は5つあります。
unset関数で要素$a[1]と$a[3]が削除されたので、削除後の表示は要素は3つになります。
第 3 回まとめ
- 配列(連想配列)とは、変数のような値(データ)を入れられる箱が連なったもの。
- 配列(連想配列)は、複数のデータが入れられる。
- 配列(連想配列)に入っている1つ1つのデータが要素、その要素に付けられた識別番号が添字(キー)
- 添字(キー)が文字列の配列が連想配列
- 要素の指定は$配列名[添字(キー)]
■ 用語集
■ 参考サイト・文献