わかりやすい!PHPの連想配列

PHP

配列の作成

配列名は、普通の変数名と同様に$から始まります。配列のボックスはいくつも増やすことができ、ボックス番号の指定は[ ](角カッコ)とキーで行います。キーは0から始まりますので、ボックス数が5であればキーは0から4になります。今回作成するような配列は、後に解説する複雑な配列(多次元いち じげんはいれっ配列)に対して、一次元配列と呼ばれます。

配列を作成するにはいくつかの方法がありますが、ここでは array(ずらりと並んでいるという意味)という関数を使って配列を作成してみます。値をカンマ区切りで指定します。関数は機能と考えておいてください。

まずは、名前が入った配列を作ってみましょう。testという名のフォルダをつくり、次のプログラムを置いて実行してください。

array関数による配列の作成(make_array_1.php)

<pre>

<?php

// array関数で配列を作成する

$friends =array(“はるき”,”かおる”, “ひでと”);

var_dump($friends); // 配列の中身を確認

?>

</pre>

実行結果

array(3) {

[0]=>

string(9)”はるき”

[1]=>

string(9) “かおる”

[2]=>

string(9) “ひでと”

}

<pre>w</pre>は、HTMLでテキストをそのまま表示できるタグです。

var_dumpの結果を、インデント付きでそのまま表示するのに便利なので、開発中に変数の中身を確認するときなどに使いましょう。

PHP 5.4からは、配列の短縮構文も追加され、array()の代わりにを使えるようになりました。こちらのプログラムは、先ほどのプログラムと同じ結果になります。同様に test フォルダに置き、実行結果を見比べましょう。

[ ]による配列の作成 (make_array_2.php)

<pre>

<?php

//[ ] で配列を作成する

$friends = [“はるき”, “かおる”, “ひでと “];

var_dump($friends); // 配列の中身を確認

?>

</pre>

実行結果

array(3) {

[0]=>

string(9) “はるき”

[1]=>

string(9)”かおる”

[2]=>

string(9) “ひでと”

}

実行結果を見ると、array関数で指定した順にキーが0から割り当てられていることがわかります。今回は名前(文字列)で配列を作りましたが、もちろん数字でもいいですし、さらに変数を格納することもできます。

$friends の0番目は、$friends[0] と表現します。キーは0で、値は「はるき」です。同様に、$friends [1]はキーが1で値が「かおる」です。

値の追加

作成した配列に値を追加するにはいくつかの方法がありますが、まずは空の[ ]を使って追加してみましょう。

$friends[ ] = “まさとし”;

で$friendsに4個目の配列を追加する

配列に値の追加をする

プログラムでは次のように書きます。testフォルダに次のファイルを置き、動作を確認しましょう。

配列に値を追加する(add_array_1.php)

<pre>

<?php

// 配列の作成、$friends[0] ~$friends [2]ができる

$friends = array(“はるき”, “かおる”, “ひでと”);

$friends[ ] = “まさとし”;  // $friends [3]に作成・代入する

var_dump($friends);  //中身を確認

?>

</pre>

実行結果

array(4) {

[0]=>

string(9) “はるき”

[1]=>

string(9) “かおる”

[2]=>

string(9) “ひでと

[3]=>

string(12) “まさとし”

}

空の [ ] を使って値を追加すると、キーは自動的に3が割り当てられます。

この他、新しいキーを指定して値を追加することもできます。フォルダに次のファイルを置いて確認してください。

キーを指定して値を追加する(add_array_2.php)

<pre>

<?php

// 配列の作成、$friends[0] ~$friends[2] ができる

$friends = array(“はるき”,”かおる”,”ひでと”);

//キーを指定して値を追加する。キーは飛び飛びの値でもOK

$friends [5] = “まさとし”;

//存在するキーを指定すると値が上書きされる

$friends[2] = “よしき”;

var_dump($friends);

?>

</pre>

実行結果

array(4) {

[0]=>

string(9) “はるき”

[1]=>

string(9) “かおる”

[2]=>

string(9) “よしき”

[5]=>

string(12) “まさとし”

}

4行目でarray関数を使って配列を作成した後、6行目のようにキーを指定して値を追加することができます。キーは飛び飛びの値でもかまいません。

8行目のように、もしすでに存在するキーを指定すると値が上書きされます。

配列はとても便利で強力な機能なので、この他にも関連する関数がたくさんあります。配列に値を追加する専用の関数もありますし、キーを振り直すものや、配列を分割するものなど……。

はじめのうちは基本的な、作る・代入する・上書きするといった操作をしますが、慣れてくると配列関数を使う機会が増えることでしょう。ぜひ便利な関数を見つけてください!

少し複雑な配列- 多次元配列

先ほどは友人の名前を配列に格納しましたが、どんどんボックスを増やしていけるところが便利でしたね。

では、例えば学校の生徒名簿を作る場合、複数のクラスごとにそれぞれ生徒がいる場合はどのようにデータを保管したらよいでしょうか?

こういうときに、配列の配列である多次元配列を使います。基本的には配列の考え方と同じですが、配列のボックスの中にさらに配列を代入することで、より柔軟にデータを保管していきます。

$students[0][1] = “かおる”

この多次元配列には2つのキーがあります。1つ目のキーは大きなグループを示すもので、クラスを表しています。2つ目のキーは各グループのボックスを示し、クラス名簿の何番目かを表しています。

$students[0] [1] が示すのは $students[0]の中に入っている配列の1番目の要素である「かおる」になります。

test フォルダに置いて、

実行結果を確認しましょう。

配列の配列 (array_array.php)

<?php

$class1 = array(“はるき”, “かおる”, “ひでと”);

$class2 = array(“ゆきこ”, “ゆか”, “まなみ”);

$students = array($class1, $class2); ;

var_dump($class1);

var_dump($class2);

var_dump($students);

?>

このように、配列に配列を入れ子にできます。配列の配列にさらに配列を入れる、といった多次元配列もできます。多次元配列は複雑なので、まずは基本である普通の配列からマスターして、徐々に慣れていきましょう。

連想配列

場合によっては、キーが数字ではなく文字列のほうが直感的にわかりやすいときがあります。例えば、5教科のテストの成績を配列で表現したいとき、キーが数字だと配列の何番目がどの教科なのか見ただけで判断できず、混乱を招く場合があります。

こうしたとき、キーから中身を連想しやすい連想配列が便利です。

中身が連想しやすい「連想配列」

連想配列のキーは文字列なので、ダブルクォーテーション(“)またはシングルクォーテーション()で囲みます。使い方は配列と同じですが、「$resultの0番目の点数」より「$result の english番目の点数」のほうが、どんな値が入っているか連想しやすくて便利ですね。

では、連想配列の使い方を確認していきましょう。

連想配列の作成

連想配列も、通常の配列と同様に作成します。 test フォルダに次のプログラ

ムを置き、連想配列の作成をしてみましょう。

連想配列の作成 (make_associative.php)

<pre>

<?php

// array関数で連想配列を作成する

$result1 = array(

“Japanese” => 80,

“math” => 75,

“science” => 90

);

var_dump($result1);

//[ ] で配列を作成する

$result2 = [

“history” => 85,

“English” => 80

];

var_dump($result2);

?>

</pre>

実行結果

array(3) {

[“Japanese”]=>

int(80)

[“math”]=>

int(75)

[“science”]=>

int(90)

}

array(2) {

[“history”]=>

int(85)

[“English”]=>

int(80)

}

このように、通常の配列と同様に、array関数や[]での配列の作成ができます。

連想配列を作成するときは、通常の配列と違って「キー => 値」という形式で指定します。この「=>」のことをダブルアロー演算子といいます。各配列要素は通常の配列のように続けて書くことも可能ですが、改行してインデントを付けると見やすくなります。

値の追加と上書き

通常の一次元配列と同様に、キーを指定して代入すれば値の追加ができます。

すでに存在しているキーを指定して代入すると、値が上書きされます。

連想配列の追加

test フォルダに次のプログラムを置いてください。連想配列を作成し、mathの点数の上書きと、musicの点数を追加してみます。

値の追加と上書き (add_associative.php)

<pre>

<?php

// 基本の連想配列を作成

$result = array(

“Japanese” => 80,

“math” => 75,

“science”=>90

);

var_dump($result); // 連想配列の確認

// mathの点数を上書き

$result[“math”] = 85;

var_dump($result);

// musicの点数を追加

$result[“music”] = 90;

var_dump($result);

?>

</pre>

実行結果

array(3) {

[“Japanese”]=>

int(80)

「”math”]=>

int(75)

[“science”]=>

int(90)

}

array(3) {

(“Japanese”]=>

int(80)

[“math”]=>

int(85)

[“science”]=>

int(90)

}

array(4) {

[“Japanese”]=>

int(80)

[“math”]=>

int(85)

[“science”]=>

int(90)

[“music”]=>

int(90)

}

このように、通常の配列と同様に、連想配列へ値の追加や上書きをすることができます。

連想配列も配列の仲間ですから、連想配列や配列のそれぞれのボックスには、値だけでなくさらに配列を代入することができます。次のプログラムを書いてみてください。

連想配列に連想配列を代入 (associative_in_associative.php)

<pre>

<?php

// テスト結果を連想配列にする

$result = array(“math” => 90, “English” => 80);

// 連想配列$friendsにテスト結果の連想配列を代入

$friends = array(“Haruki” => $result);

var_dump($friends); // 結果を確認

//連想配列にキーを指定して追加し、値として連想配列を代入

$friends (“Kaoru” ]= array(“math” => 95, “English” => 85);

var_dump($friends); // 結果を確認

?>

</pre>

実行結果

array(1) {

[“Haruki”]=>

array(2) {

[“math”]=>

int(90)

[“English”]=>

int(80)

}

}

array(2) {

[“Haruki”]=>

array(2) {

[“math”]=>

int(90)

[“English”]=>

int(80)

}

[“Kaoru”]=>

array(2) {

[“math”]=>

int(95)

[English”]=>

int(85)

}

}

配列や連想配列は、どちらもPHPのプログラムで頻繁に使われる重要な機能です。何度もプログラムを書いて、その特性を理解してください。

5

制御構文と配列

関連性のあるデータをまとめたものが配列ですから、その配列を利用するときも、まとめて処理できたほうが便利ですよね。配列と制御構文を組み合わせて使ってみます。

for 構文と配列

まずは、キーが数字となっている配列を、for構文を使って全部表示してみ

ます。次のプログラムを testフォルダに置いて実行してみましょう。

for構文で配列の値を出力(for_array.php)

<?php

$friends = array(“はるき”, “かおる”、”ひでと “);

for ($i = 0; $i < 3; $i++){ // $iが0から3未満(0~2)のループ

echo $friends [$i].”<br>”; // $friendsの指定要素を表示

}

?>

実行結果

はるき

かおる

ひでと

array関数でキーを指定しなかった場合、配列のキーは0から始まりますので、$friends のキーは 0、1、2になっています。for構文では $iが0から2までのループを示しており、配列のキーとして $i を指定しています。

foreachと連想配列

では、連想配列のときはどうでしょうか? キーが文字列なので、単純に

for構文でキーをインクリメントして指定することができません。

そんなときに便利なのが、foreach構文です。配列のそれぞれ(each)につ

いて forするという意味の構文です。配列が存在する分だけループさせるには

これを使いましょう。

構文 foreach構文

foreach (配列 as 値の変数名){

処理

}

配列のデータをループ内変数名として foreachの処理内で利用することができます。「値の変数名“として”」というのが as の意味です。

次のプログラムは、3教科の点数を格納した連想配列をforeach構文で表示しています。test フォルダに置いて実行結果を確認してください。

foreach構文で連想配列の値を出力 (foreach.php)

<?php

$results array(

“math” => 90,

“english” => 80,

“japanese” => 85

);

foreach ($results as $score) {

echo $score . “<br>”;

}

?>

実行結果

90

80

85

しかし、これではどの教科が何点だったのかわかりにくいので、キーも表示してみます。連想配列のキーを foreach構文で利用するには、次のように書きます。

foreach (配列 as キー変数名 => 値の変数名){

処理

}

今度は、配列をキー変数名と値の変数名に、アロー演算子で分けています。こうすることで、foreachの処理内でキー名も利用することができます。

先ほどのプログラムを、キー名も表示するように変更してみましょう。

foreach構文で連想配列のキーと値を出力 (foreach_key.php)

<?php

$results = array(

“math” => 90,

“english” => 80,

“japanese” => 85

);

foreach ($results as $title => $score) {

echo $title . “:” . $score . “<br>”;

}

?>

実行結果

math:90

english : 80

japanese:85

foreach構文は連想配列に便利な構文ですが、もちろん通常の配列にも使

えます。次のプログラムは、数字の配列を10倍するプログラムです。

foreach構文で通常の配列を操作(foreach_array.php)

<pre>

<?php

$numbers = array(2, 4, 6);

foreach ($numbers as $key => $value) {

$numbers[$key] = $value * 10;   //10倍して元の配列要素に代入し直す。

}

var_dump($numbers); // 10倍になったか確認

?>

</pre>

実行結果

array(3) {

[0]=>

int(20)

[1]=>

int(40)

[2]=>

int(60)

}

作成した配列のキーは、特に指定していませんでしたので、0から順に自動的に割り当てられています。foreach ループをする際、自動で割り当てられたキーを$key、値を$valueに格納していきます10倍した値を、foreach構文のループ内で得たキーを使って、元の配列に再代入しています。

制御構文のその他の書き方

HP は HTMLと混ぜ書きすることも多いことから、if、while、for、foreach、switchの構文には別の書き方があります。

<?php if ($i == 0) : ?>

iは0です

<?php endif; ?>

このように、開始の波カッコ() をコロン(:)に替え、終了はそれぞれ

Enendif;  endwhile;  endfor;    endforeach;,   endswitch;  

になります。HTMLで表を作る際、テーブルタグを使いますが、テーブルタグはタ

グが入れ子になっていて複雑になるので、PHPの構文をこう書くことで見やすくすることができます。

最新情報をチェックしよう!

PHPの最新記事8件

>プログラミング 独学

プログラミング 独学

本当にプログラミングを学びたい人のためになるブログにしたいと思っていますので、些細なことでも気が付いたのであればご報告いただけると幸いです。

CTR IMG