Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. PHPBeginner - The Double Arrow Operator and Multidimensional Arrays

The Double Arrow Operator and Multidimensional Arrays - Japanese Only

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

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

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

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

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

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

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

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

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

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

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

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

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

<?php
$vocaloids = array(
    'miku' => '080-xxxx-1234',
    'IA' => '090-yyyy-1234',
    'rin' => '080-zzzz-1234'
);

var_dump($vocaloids);

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

array(3) {
  ["miku"]=>
  string(13) "080-xxxx-1234"
  ["IA"]=>
  string(13) "090-yyyy-1234"
  ["rin"]=>
  string(13) "080-zzzz-1234"
}

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

<?php
$vocaloids['miku'] = '080-xxxx-1234';
$vocaloids['IA'] = '090-yyyy-1234';
$vocaloids['rin']  = '080-zzzz-1234';

var_dump($vocaloids);

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

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

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

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

<?php
$arr = [
	['miku', 'IA'],
	['Naked Snake', 'Kazuhira Mirror']
];

var_dump($arr);

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

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(4) "miku"
    [1]=>
    string(2) "IA"
  }
  [1]=>
  array(2) {
    [0]=>
    string(11) "Naked Snake"
    [1]=>
    string(15) "Kazuhira Mirror"
  }
}

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

<?php
$arr = array(
	'METAL GEAR SOLID' => array(
		'HERO' => 'Solid Snake'
	),
	'METAL GEAR SOLID 2' => array(
		'HERO' => 'Raiden'
	),
	'METAL GEAR SOLID 3' => array(
		'HERO' => 'Naked Snake'
	),
	'METAL GEAR SOLID 4' => array(
		'HERO' => 'Old Snake'
	),
	'METAL GEAR SOLID 5' => array(
		'HERO' => 'BIG BOSS'
	)
);

var_dump($arr);

実行結果です。

array(5) {
  ["METAL GEAR SOLID"]=>
  array(1) {
    ["HERO"]=>
    string(11) "Solid Snake"
  }
  ["METAL GEAR SOLID 2"]=>
  array(1) {
    ["HERO"]=>
    string(6) "Raiden"
  }
  ["METAL GEAR SOLID 3"]=>
  array(1) {
    ["HERO"]=>
    string(11) "Naked Snake"
  }
  ["METAL GEAR SOLID 4"]=>
  array(1) {
    ["HERO"]=>
    string(9) "Old Snake"
  }
  ["METAL GEAR SOLID 5"]=>
  array(1) {
    ["HERO"]=>
    string(8) "BIG BOSS"
  }
}

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

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

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

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

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

echo $MGS5TPP['Developer(s)']; // 文字列『Kojima Productions』が出力されます。

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

echo $MGS5TPP['Main Characters'][0]; // 文字列『BIG BOSS』が出力されます。

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

$MGS5TPP['Main Characters'][0] = 'Naked Snake'; // 文字列『BIG BOSS』を文字列『Nekid Snake』に書き換えます。

echo $MGS5TPP['Main Characters'][0]; // 文字列『Nekid Snake』が出力されます。

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

echo count($MGS5TPP); // 1次元配列しか数えてくれないので『Title』、『Developer(s)』、『Producer』、『Main Characters』の計4つとなります。

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

<?php
$MGS5TPP = array(
    'Title' => 'METAL GEAR SOLID V: The Phantom Pain',
    'Developer(s)' => 'Kojima Productions',
    'Producer' => 'Hideo Kojima',
    'Main Characters' => [
        'BIG BOSS',
        'Kazuhira Mirrer',
        'Revolver Ocelot',
        'Quiet',
        'Skull Face'
    ]
);

echo count($MGS5TPP, COUNT_RECURSIVE); // 第2引数に『COUNT_RECURSIVE』と記述してあげると全ての配列数を数えてくれます。なので9つになります。
// echo count($MGS5TPP, 1); // 第2引数は『1』でもOKです。
// echo sizeof($MGS5TPP, COUNT_RECURSIVE); // 『sizeof()』でも同じ記法です。

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

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

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .