10日で覚えるPHPのキソ 第 3 回 配列(連想配列)

No Photo

PHPのキソ(超基礎編)第 3 回は、配列と連想配列についてお話します。

変数同様、目に見えないものなので、まずは頭の中でイメージする練習から始めましょう。

配列とは?

080414_ichikawa_php03_01.gif

変数のイメージは箱でした。
配列は、変数のような箱が連なったものをイメージしてください。
「タンス」でも「連なったティッシュ箱」でもなんでも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つの配列にすることもできます

080414_ichikawa_php03_02.gif

<?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…」と割り振られます。

連想配列とは?

080414_ichikawa_php03_03.gif

配列のところでも少し触れましたが、連想配列とは、添字(キー)に文字列を用いた配列です。
文字列なので、「"」(ダブルクォーテーション)もしくは「'」(シングルクォーテーション)囲みます。

連想配列を作ってみる

作り方は、添字(キー)の指定の部分以外、配列と同じです。
  • 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つのデータが要素、その要素に付けられた識別番号が添字(キー)
  • 添字(キー)が文字列の配列が連想配列
  • 要素の指定は$配列名[添字(キー)]

■ 用語集

■ 参考サイト・文献

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ