PHPなら覚えるべきデータ構造はひとつだけ? - 配列
PHPを使う場合に必ず必要になるデータ構造、配列の使い方の覚書きです。
目次
PHPの配列は高機能
PHPの配列は、配列とマップの両方の役割を果たす高機能なデータ構造です。
まず、複数件のデータを扱ういわゆる配列として使用できます。
さらに、キーと関連付けてデータを格納する、マップとしても使用できます。
配列らしい使い方
■配列を生成する
配列の生成は以下のように行います。
$配列の名前 = array(); $配列の名前 = array( データ1, データ2, … );
配列の生成では、配列の名前を指定します。もし、生成時に配列にデータを格納する場合は、()中に格納するデータを指定します。
なお、PHPの配列の生成では、配列のサイズは指定しません。
例えば、空の配列array1を生成するには、以下のように書きます。
$array1 = array();
もう一つ例を挙げます。データを4つ格納した配列array2を生成するには、以下のように書きます。
$array2 = array( "APPLICATION", "SESSION", "REQUEST", "PAGE" );
■配列にデータを追加する
配列へのデータを追加は以下のように行います。
$配列の名前[] = データ; array_push( $配列の名前, データ1, データ2, … );
データの追加では、配列の名前とデータを指定します。1件のデータを追加する場合は『$配列の名前[] = 』の形式を、複数件のデータを追加する場合は『array_push()』を使うとよいです。
追加するたびに、データは配列の末尾に追加され、配列のサイズが増えていきます。
例えば、配列array1にデータを追加するには、以下のように書きます。
$array1[] = "test"; array_push( $array1, "hello", "world" );
■配列からデータを取得する
配列からのデータを取得は、以下のように行います。
関数( $配列の名前[添字] ); 変数 = $配列の名前[添字]; return $配列の名前[添字];
配列からのデータの取得では、配列の名前とデータを取得する位置(添字)を指定します。添字とは配列中の位置を表す数字で、「0」以上「配列のサイズ」より小さいの数字を指定する必要があります。
配列から取得したデータは、変数に代入したり、関数の引数に渡したり、関数の戻り値として返したりできます。
たとえば、配列array1の内容を取得し、画面に表示するには以下のように書きます。
print $array1[0]."\n"; => test print $array1[1]."\n"; => hello print $array1[2]."\n"; => world
■配列中のすべてのデータに同じ処理をする
配列中のすべてのデータに同じ処理をするには、以下のようなfor文を使用します。
for ( $ i = 0; $i < count( $配列の名前 ); ++ $i ) { // $配列の名前[$i]を使用した処理 }
このfor文の『count( 配列の名前 )』は配列のサイズを表します。そのため、このfor文を使えば配列中のすべてのデータに同じ処理を行えます。
例えば、配列array2中のデータをすべて表示するには、以下のように書きます。
for ( $i = 0; $i < count( $array2 ); ++$i ) { echo $array2[$i]."\n"; }
配列array2のサイズを4だとすれば、これは以下のように書いた場合と同じ結果になります。
echo $array2[0]."\n"; => APPLICATION echo $array2[1]."\n"; => SESSION echo $array2[2]."\n"; => REQUEST echo $array2[3]."\n"; => PAGE
マップみたいな使い方
■(マップみたいに)配列を生成する
配列の生成は以下のように行います。
$配列の名前 = array(); $配列の名前 = array( キー1 => データ1, キー2 => データ2, … );
配列の生成では、配列の名前を指定します。
もし、生成時にマップみたいにデータを格納する場合は、()内にキーとデータを指定します。配列に格納したデータは、キーに関連付けられます。
例えば、空の配列mapを生成するには、以下のように書きます。
$map1 = array();
もう一つ例を挙げます。キーを4つ格納した配列map2を生成するには、以下のように書きます。
$map2 = array( "Jan" => "1月", "Feb" => "2月", "Mar" => "3月", "Apr" => "4月" );
■(マップみたいに)配列にデータを格納する
配列へのデータの格納は以下のように行います。
$配列の名前[キー] = データ;
マップみたいなデータの格納では、配列の名前とキーとデータを指定します。配列に格納したデータは、キーに関連付けられます。
例えば、配列map1にデータを格納するには、以下のように書きます。
$map1["red"] = "apple"; $map1["yellow"] = "banana"; $map1["green"] = "watermelon";
■(マップみたいに)配列にデータを取得する
配列からのデータの取得は以下のように行います。
関数( $配列の名前[キー] ); 変数 = $配列の名前[キー]; return $配列の名前[キー];
マップみたいなデータの取得では、配列の名前とキーを指定します。キーに関連付いたデータが、配列から取得されます。
配列から取得したデータは、変数に代入したり、関数の引数に渡したり、関数の戻り値として返したりできます。
たとえば、配列map1の内容を取得し、画面に表示するには以下のように書きます。
print $map1["yellow"]."\n"; => banana print $map1["red"]."\n"; => apple print $map1["green"]."\n"; => watermelon
■(マップみたいに)配列中のすべてのデータに同じ処理をする
配列中のすべてのデータに同じ処理をするには、以下のようなforeach文を使用します。
foreach ( $配列の名前 as $key => $data ) { // $keyや$dataを使用した処理 }
このforeach文では、全てのキーとデータについて処理が繰り返されます。繰り返す毎に、変数$keyにはキーが、変数$dataにはデータが格納されます。
例えば、配列map2中のすべてのキーとデータの関連付けを表示するには、以下のように書きます。
foreach( $map2 as $key => $data ) { echo "$key: $data\n"; }
これは、以下のように書いた場合と同じような結果になります。ただし、キーの順序は決まっていないので、表示順序が異なることがあります。
print "Jan: ".$map2["Jan"]."\n"; => 1月 print "Feb: ".$map2["Feb"]."\n"; => 2月 print "Mar: ".$map2["Mar"]."\n"; => 3月 print "Apr: ".$map2["Apr"]."\n"; => 4月
データ構造
アルゴリズム
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&マップ編)
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&ビーン編)
- PHPを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- VBAを使うなら理解しておきたいアルゴリズム - 抽出・結合・集計
- Javascriptを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- SQLを使うなら理解しておきたいアルゴリズム?(というか、select文の書き方) - where・order by・join・group by
- Bashを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計