第5章 配列を詳しく知って扱おう

5.3 配列関数を利用してみよう

この節では配列関数を利用したプログラムを紹介していきますが、使い方はほんの一例に過ぎません。作成するプログラムの処理に応じて配列関数を使いこなせるようになりましょう。

学習する関数
  • array_fill_keys、count(5.3.1項)
  • asort、arsort(5.3.2項)
  • in_array(5.3.3項)

5.3.1 連想配列をまとめて作成する

配列関数array_fill_keysを利用すると、指定したキー配列と値でまとめて連想配列を作成することができます。
また、ここでいう連想配列とは、添字キーに文字列を用いた配列のことを意味します。

■array_fill_keys:連想配列を指定したキーと値で作成する

関数名:array_fill_keys(連想キー配列、要素の初期値)
第1引数:文字キーに指定したい連想キー文字列が入った配列
第2引数:全ての要素に代入する初期値
戻り値:引数の情報を元に作成した配列

凡例:array_fill_keys

凡例をイメージで表すと以下のようになり、指定した文字列データの配列$keysをキーにして全ての要素の初期値を0で連想配列$dataを作成します。


図 5.3.1: array_fill_keysを使った連想配列の作成

array_fill_keysを利用したプログラム

array_fill_keysを使って連想配列を作成し、さらにcount関数を使って作成された連想配列の要素数を数えた結果をWeb画面に 表示して確認します。

ソース・フォルダー: myproj_basic/ch05
パッケージ: arrayFunction1.php
アクセスURL:http://localhost/myproj_basic/ch05/arrayFunction1.php

arrayFunction1.php

実行結果

解説

今回のプログラムは配列関数array_fill_keysを使って連想配列を作るところがポイントです。要素の数5個程度ならarray関数で普通に作っても問題ありませんが、さらに大量の要素を同じ初期値でまとめて作りたい場合にarray_fill_keysを使うと大変便利です。

2行目でarray関数を使って教科名の配列データを用意しています。

5行目では2行目の教科名のデータと、数値の100を引数に連想配列を作成しています。


図 5.3.2: array_fill_keysを使った教科データの連想配列作成

8行目では配列関数のcountを使って配列の要素の総数を取得しています。


図 5.3.3: count関数を使って配列要素の総数を取得する

最後に15行目で要素の総数$countと、17~19行目ではforeach文を使って連想配列$dataの値とキー値を全て表示しています。

5.3.2 配列を並び替える

配列のデータを並び替える処理を自分で記述するのは大変難しいです。しかし、配列関数を利用するとそんな手間をかけなくても簡単に並び替えを行うことができます。

■asort:連想配列のキー要素の関係を維持して、要素の昇順(小さい)に並び替える

関数名:asort(連想配列)
引数:並び替えたい連想配列
戻り値:なし(渡した連想配列の中身を自動で変更する)

■arsort:連想配列のキー要素の関係を維持して、要素の降順(大きい)に並び替える

関数名:arsort(連想配列)
引数:並び替えたい連想配列
戻り値:なし(渡した連想配列の中身を自動で変更する)

凡例:asort、arsort

凡例をイメージで表すと以下のようになり、指定した連想配列をキーと要素の関係を維持しつつ並び替えを行います。


図 5.3.4:連想配列を並び替える

asortとarsortを利用したプログラム

asort関数とarsort関数を利用して、連想配列をキーと要素の関係を維持したまま並び替え、それぞれの実行結果をWeb画面に表示して確認します。

ソース・フォルダー: myproj_basic/ch05
パッケージ: arrayFunction2.php
アクセスURL:http://localhost/myproj_basic/ch05/arrayFunction2.php

arrayFunction2.php

実行結果

解説


図 5.3.5: 5教科の点数データを連想配列に用意

9~12行目で7行目で用意したままの状態の配列データを画面に出力しています。実行結果からも分かるように初めに用意した並び順で表示されているのが確認できます。

14行目で連想配列$dataをasort関数を利用して、キーと要素の関係を維持し要素の昇順に並び替えます。


図 5.3.6:asortを使って昇順に並び替える

15~18行目でasort関数で並び替えた結果を画面に表示しています。実行結果から確認できますが、キーと値の関係を維持して、配列のデータを正しく昇順に並び替えています。

20行目は14行目のasortは逆に、連想配列$dataをarsortを利用して降順に並び替えています。


図 5.3.7:arsortを使って降順に並び替える

21~24行目でarsort関数で並び替えた結果を画面に表示しています。実行結果から確認できますが、キーと値の関係を維持して、配列のデータを正しく降順に並び替えています。

5.3.3 配列の中を調べる

配列の中にとあるデータが既にあるのかないのかを調べてから、その配列を利用したい時があります。そのような時にin_array関数を利用すると簡単に配列の中を検索することができます。

■in_array:対象データが配列の要素内にあるか検索する

関数名:in_array (検索情報、検索対象の配列)
第1引数:検索したい情報
第2引数:検索対象の配列
戻り値:true(見つかった場合)/false(見つからなかった場合)

凡例:in_array

凡例の結果は検索対照の文字列「Perl」が、配列$data内にはないので戻り値falseを受け取り、elseブロックの処理を行うことになります。

in_arrayを利用したプログラム

画面から入力してもらったデータが、用意している配列データに存在するかin_array関数を利用して行い、その結果をWeb画面に表示して確認します。

ソース・フォルダー: myproj_basic/ch05
パッケージ: arrayForm.php
アクセスURL:http://localhost/myproj_basic/ch05/arrayForm.php

arrayForm.php

ソース・フォルダー: myproj_basic/ch05
パッケージ: arrayFunction3.php
アクセスURL:arrayForm.phpからの画面遷移でアクセスされる

arrayFunction3.php

実行結果

解説

このプログラムのポイントは「arrayForm.php」からの入力データを「arrayFunction3.php」で受け取ります。その受け取ったデータが用意している配列データの中にあるかどうかを判断して、画面に表示する結果を変更します。
メインであるデータの受け取り処理を行う「arrayFunction3.php」側についての解説を行っていきます。

3行目で料理のデータを配列$foodsに用意しています。


図 5.3.8:料理データ配列$foods

5~9行目がin_array関数を使って配列に入力データがあるかを判断して、その結果で条件分岐を行う処理になっています。
もしも入力データが配列にあればin_array結果は「true」となり、ifブロックの処理を行います。逆に、入力データが配列になければin_array結果は「false」となり、elseブロックの処理を行います。

16行目は最後に結果のメッセージを画面に表示しています。実行結果からも分かりますが、配列にデータがある「ラーメン」はifブロックのメッセージ、配列になかった「たこ焼き」はelseブロックのメッセージになっているのが正しく確認できます。


図 5.3.9:in_array関数の結果

NEXT>> 5.4 本章のまとめ