Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. PHP入門編 - ダブルアロー演算子と多次元配列

ダブルアロー演算子と多次元配列

みなさまどうも。いかがお過ごしでしょうか。

前回は連想配列についてやりましたね。今回も引き続き配列関係のお話です。PHPで連想配列を定義するときに『ダブルアロー演算子』(ダブルアロー)とかいうのを使ったりしますが、これを使って連想配列を操作し、そのついでに『多次元配列』(たじげんはいれつ)っていうのをやっていきましょう。

まず『ダブルアロー演算子』の記述方法からです。『ダブルアロー演算子』は『=>』と記述します。配列の解説で出てきた『array()』ってありましたよね。当サイトのサンプルでは添字配列を定義するときにしか『array()』を使ってきませんでしたが、実は連想配列も『array()』を使って定義することができます。その際に『ダブルアロー演算子』が使用されます。

この『ダブルアロー演算子』は最近のプログラム言語ではよく見かけますが、古いプログラム言語にはあまり実装されていない演算子です。なので比較的新し目な記法となりますね。あとちょっと似た感じで『アロー演算子』(->)っていうのがありますがこれはクラスというところで使うので今は一旦、放置です。

(´-`).。oO(google検索では記号を使うと特殊な検索ができたりするのですが...)

(´-`).。oO(それが原因で『=>』とか『->』とかをgoogle先生に質問してみても思う結果が得られません...)

(´-`).。oO(google先生は記号だけの質問に上手く答えられなかったりするのでございます...)

(´-`).。oO(なので『ダブルアロー演算子』と『アロー演算子』という名前はゆめゆめお忘れなきよう...)

というわけで以下が『array()』を使って連想配列を定義したサンプルです。

  1. <?php
  2. $vocaloids = array('miku' => '080-xxxx-1234');
  3. // 『$vocaloids['miku'] = '080-xxxx-1234'』と記述していることと同じです。

『array()』の引数の『()』の中でキーに対して『=>』を使って値を紐付けてあげればOKです。ちなみにPHP5.4以降ならば『array()』の代わりに『[]』を使うこともできます。

  1. <?php
  2. $vocaloids = ['miku' => '080-xxxx-1234']; // PHP5.4以降ならば『[]』も使えます。

以下が大量に生成したサンプルです。添字配列の定義のときと同じく『,』で各プロパティを分ければOKです。インデントするとしたらこんな感じなのでそのあたりも同時に確認してみてください。

  1. <?php
  2. $vocaloids = array(
  3. 'miku' => '080-xxxx-1234',
  4. 'IA' => '090-yyyy-1234',
  5. 'rin' => '080-zzzz-1234'
  6. );
  7.  
  8. var_dump($vocaloids);

これを出力するとこうなります。

  1. array(3) {
  2. ["miku"]=>
  3. string(13) "080-xxxx-1234"
  4. ["IA"]=>
  5. string(13) "090-yyyy-1234"
  6. ["rin"]=>
  7. string(13) "080-zzzz-1234"
  8. }

これは以下と記述しているのと同じです。

  1. <?php
  2. $vocaloids['miku'] = '080-xxxx-1234';
  3. $vocaloids['IA'] = '090-yyyy-1234';
  4. $vocaloids['rin'] = '080-zzzz-1234';
  5.  
  6. var_dump($vocaloids);

『ダブルアロー演算子』の使用方法はこんな感じです。動きとしては『=』と近いものがありますね。『ダブルアロー演算子』は『array()』の引数の中で入力するために使われる、と覚えておくと良いかもしれません。

ちょっとイメージ的な注意点ですが『=>』なので左から右へ入力されるかと思いきや右から左への入力になります。見た目は右方向の矢印っぽいですが、基本的にプログラミングでは右辺から左辺へと処理が進んでいきますので『=>』も然りです。間違えないようにしましょう。

では続きまして『多次元配列』の解説です。『多次元配列』とは配列の中に配列が入っている配列のことです。PHPに限らず、ほぼ全ての言語で配列の中に配列を入れる『多次元配列』の構築が可能だったりします。ところで『多次元配列』って名前格好いいですよね。中二病っぽくておしゃれなので個人的に好みです。まあどうでもいいですね、すみません。

『多次元配列』の定義はとっても簡単で、配列の要素の中で『array()』とか『[]』を使ってさらに配列をいれてあげればそれは立派な『多次元配列』になります。しかし、基本的な記述が簡単な反面、ソースコードが『array()』とか『[]』だらけになってしまうので読み解くのがかなり大変です。ちょっと見てみましょう。以下がサンプルです。

  1. <?php
  2. $arr = [
  3. ['miku', 'IA'],
  4. ['Naked Snake', 'Kazuhira Mirror']
  5. ];
  6.  
  7. var_dump($arr);

いかがでしょう。『[]』だらけでかなりカオスになってますね。これを実行させるとこうなります。

  1. array(2) {
  2. [0]=>
  3. array(2) {
  4. [0]=>
  5. string(4) "miku"
  6. [1]=>
  7. string(2) "IA"
  8. }
  9. [1]=>
  10. array(2) {
  11. [0]=>
  12. string(11) "Naked Snake"
  13. [1]=>
  14. string(15) "Kazuhira Mirror"
  15. }
  16. }

これまたカオスになってますね。しかしまだまだ甘いのでございます。『array()』を使って多次元連想配列なんかを定義すると魑魅魍魎レベルのカオスになります。

  1. <?php
  2. $arr = array(
  3. 'METAL GEAR SOLID' => array(
  4. 'HERO' => 'Solid Snake'
  5. ),
  6. 'METAL GEAR SOLID 2' => array(
  7. 'HERO' => 'Raiden'
  8. ),
  9. 'METAL GEAR SOLID 3' => array(
  10. 'HERO' => 'Naked Snake'
  11. ),
  12. 'METAL GEAR SOLID 4' => array(
  13. 'HERO' => 'Old Snake'
  14. ),
  15. 'METAL GEAR SOLID 5' => array(
  16. 'HERO' => 'BIG BOSS'
  17. )
  18. );
  19.  
  20. var_dump($arr);

実行結果です。

  1. array(5) {
  2. ["METAL GEAR SOLID"]=>
  3. array(1) {
  4. ["HERO"]=>
  5. string(11) "Solid Snake"
  6. }
  7. ["METAL GEAR SOLID 2"]=>
  8. array(1) {
  9. ["HERO"]=>
  10. string(6) "Raiden"
  11. }
  12. ["METAL GEAR SOLID 3"]=>
  13. array(1) {
  14. ["HERO"]=>
  15. string(11) "Naked Snake"
  16. }
  17. ["METAL GEAR SOLID 4"]=>
  18. array(1) {
  19. ["HERO"]=>
  20. string(9) "Old Snake"
  21. }
  22. ["METAL GEAR SOLID 5"]=>
  23. array(1) {
  24. ["HERO"]=>
  25. string(8) "BIG BOSS"
  26. }
  27. }

うーん、ファンタスティックでございますね。こんな感じで『多次元配列』はソースコードがカオスになりがちなので慣れないと中々読み解くのが大変です。

んでもってPHPはサーバー側で実行する言語になりますので、データベースやJSONなどからデータを引っ張ってくる機会が多く、その場合は大体『多次元配列』で受け取る感じになります。

なので『多次元配列』をある程度さらりと読み解ける読解力なんかも重要になってきます。最初のうちは大変かもしれませんが、慣れるとサラリと読み解けるようになりますのでここは気合で頑張ってください。『連想配列』を記述する際も『,』や『;』の記述ミスがないか要チェックです。

さて、続いて『多次元配列』の値の取り出し方に関してみていきましょう。『多次元配列』は配列の中に配列が入っている構造なので、必要な分だけ『[]』を使って配列をたどっていけばOKでございます。

以下に著者が現在プレイ中の『METAL GEAR SOLID V: The Phantom Pain』についての多次元配列を定義してみました。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );

こちらでちょいと練習してみましょう。まず『Kojima Productions』という値を取り出してみます。多次元配列『MGS5TPP』の中のキー『Developer(s)』の中身が『Kojima Productions』なのでこうなります。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );
  14.  
  15. echo $MGS5TPP['Developer(s)']; // 文字列『Kojima Productions』が出力されます。

では続いて『BIG BOSS』という値を取り出してみます。『BIG BOSS』という値は多次元配列『MGS5TPP』の中の『Main Characters』の中の『0』番目の要素なので以下の記述で取り出せます。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );
  14.  
  15. echo $MGS5TPP['Main Characters'][0]; // 文字列『BIG BOSS』が出力されます。

こんな感じで『多次元配列』の構造をたどっていく形で『[]』の中にキー(インデックス)を入れていけばその値にアクセスできます。値を書き換えたい場合も同じです。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );
  14.  
  15. $MGS5TPP['Main Characters'][0] = 'Naked Snake'; // 文字列『BIG BOSS』を文字列『Nekid Snake』に書き換えます。
  16.  
  17. echo $MGS5TPP['Main Characters'][0]; // 文字列『Nekid Snake』が出力されます。

これまでの当サイトで紹介してきた配列数を教えてくれる『count()』がありましたが、『count()』は通常、1次元配列しか数えてくれません。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );
  14.  
  15. echo count($MGS5TPP); // 1次元配列しか数えてくれないので『Title』、『Developer(s)』、『Producer』、『Main Characters』の計4つとなります。

多次元配列全てを数えてほしい場合は『count()』の第2引数に『1』、または『COUNT_RECURSIVE』と指定すればOKです。これは『sizeof()』でも同じです。

  1. <?php
  2. $MGS5TPP = array(
  3. 'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
  4. 'Developer(s)' => 'Kojima Productions',
  5. 'Producer' => 'Hideo Kojima',
  6. 'Main Characters' => [
  7. 'BIG BOSS',
  8. 'Kazuhira Mirrer',
  9. 'Revolver Ocelot',
  10. 'Quiet',
  11. 'Skull Face'
  12. ]
  13. );
  14.  
  15. echo count($MGS5TPP, COUNT_RECURSIVE); // 第2引数に『COUNT_RECURSIVE』と記述してあげると全ての配列数を数えてくれます。なので9つになります。
  16. // echo count($MGS5TPP, 1); // 第2引数は『1』でもOKです。
  17. // echo sizeof($MGS5TPP, COUNT_RECURSIVE); // 『sizeof()』でも同じ記法です。

という感じでございますね。『多次元配列』は『array()』と『[]』だらけになりますのでちょっと慣れないと頭が痛くなってしまうかもしれませんが気合で乗り切っていってください。

続いての記事では『真偽値』っていうやたら白黒はっきりさせてくるやつと『比較演算子』について色々とやっていきたいと思います。ではこの辺で。またお会いしましょう。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。