プログラミングでは、いずれの言語にも複数のデータを1つにまとめて扱うための機能が用意されています。
PHPもまた同様に、配列と呼ばれる複数の値をまとめて扱うためのデータ型があります。
配列は、中に格納されている値の構造や、それぞれの値へのアクセス方法の違いによって、いくつかの種類に分類することができます。
そのうちの1つが、連想配列と呼ばれる配列になります。
今回の記事では、PHPで連想配列を扱う方法について、詳しく解説していきたいと思います。
PHPの連想配列とは?
連想配列は、配列の一種です。
通常の配列と同様に、複数のデータを1つにまとめて扱うことができますが、各要素へのアクセスをインデックスではなく、任意に指定可能なキーによって行うのが大きな特徴の1つです。
その他の言語では、辞書型などと呼ばれる配列とは異なる型のことを指す場合が多い連想配列ですが、PHPにおいては、通常の配列と連想配列のどちらも同じ型として扱います。
そのため、1つの配列の中でも、インデックスによって管理される要素とキーによって管理される要素を混在させることもできます。
【サンプルコード】
$array = array('apple'=>'りんご', 'みかん', 'peach'=>'もも');
連想配列の使い方
連想配列の具体的な使用方法について、順に解説していきます。
連想配列を宣言する
宣言時に要素は格納せず空の配列を作成する場合は、通常の配列と同様に記述します。
【基本構文】
$配列名 = array();
// もしくは
$配列名 = [];
宣言と同時に要素を格納(初期化)する場合は、以下のように宣言します。
【基本構文】
$配列名 = array(キー1=>値1, キー2=>値2, …);
// もしくは
$配列名 = [キー1=>値1, キー2=>値2, …];
状況に応じて使い分けましょう。
keyを指定して値を取得する
連想配列の作成と要素の格納が完了したら、キーを指定して値を取り出すことができます。
キーを指定する際は、以下のように [] 内に記述します。
【基本構文】
$配列名[キー];
以下の例で、実際の動きを見てみましょう。
【サンプルコード】
$fruitsArray = [
'apple'=>'りんご',
'grape'=>'ぶどう',
'peach'=>'もも'];
echo $fruitsArray['apple']."\n";
echo $fruitsArray['grape']."\n";
echo $fruitsArray['peach']."\n";
【実行結果】
りんご
ぶどう
もも
それぞれのキーに対応する値が表示されているのが分かりますね。
このように、取り出したい要素のキーを指定することでアクセスが可能となります。
foreachループで連想配列のkeyと値を出力する
配列内の要素に対して処理を行う際に、要素1つ1つに対して処理を別々に記述する方法では、
コードが膨大な量となってしまうケースが多々あります。
全ての要素に対して同じような処理を行う場合は、ループ処理を活用してコードを簡素化させましょう。
foreach文を使用することで、配列内の各要素に順にアクセスすることができます。
【サンプルコード】
$fruitsArray = [
'apple'=>'りんご',
'grape'=>'ぶどう',
'peach'=>'もも'
];
foreach($fruitsArray as $key=>$value){
echo $key.':'.$value."\n";
}
【実行結果】
apple:りんご
grape:ぶどう
peach:もも
foreach文で連想配列を対象にする場合は、変数の指定時に 「$キーの変数名=>$値の変数名」 と記述することで、要素の値だけでなくキーも同時に取得することができます。
なお、変数が1つのみの場合は、通常の配列と同様に値だけが格納されます。
連想配列のkeyを指定して値を上書きする
連想配列の要素の値は、後から別の値に上書きすることもできます。
値の上書きを行う際は、変更したい要素のキーを指定し、変数に値を代入するときと同じような形式で上書きしたい値を記述します。
【サンプルコード】
$fruitsArray = ['grape'=>'ぶどう'];
echo '変更前:'.$fruitsArray['grape']."\n";
$fruitsArray['grape'] = 'ブドウ';
echo '変更後:'.$fruitsArray['grape']."\n";
【実行結果】
変更前:ぶどう
変更後:ブドウ
無事に値が変更されましたね。
このように、連想配列の要素は後から値を変更することが可能です。
連想配列のkeyを指定して値を追加する
連想配列内にまだ存在しないキーを指定することで、新しく値を追加することもできます。
以下の例を見てみましょう。
【サンプルコード】
$fruitsArray = [
'apple'=>'りんご',
'grape'=>'ぶどう'
];
echo '変更前:';
print_r($fruitsArray);
$fruitsArray['peach'] = 'もも';
echo "\n".'変更後:';
print_r($fruitsArray);
【実行結果】
変更前:Array
(
[apple] => りんご
[grape] => ぶどう
)
変更後:Array
(
[apple] => りんご
[grape] => ぶどう
[peach] => もも
)
対象の配列内に存在していなかった 「peach」 の文字列をキーに指定することで、新しく値を追加することができています。
なお、キーを指定する際に間違えて既存のものと同じキーを指定してしまうと、値が上書きされてしまうため注意が必要です。
連想配列のkeyが存在するかどうかを調べる
上述したように、連想配列内の要素の値を上書きする場合や、新しい値を追加する場合に、キーの指定を間違えると思わぬ不具合を招く原因となりかねません。
そのため、上書きや追加の処理を行う際は、事前に対象とするキーが存在するかどうかを調べる必要があります。
連想配列内のキーの有無を確認できる方法は、以下の2通りです。
- isset関数を使用する
- array_key_exists関数を使用する
isset関数は、厳密にはキーの有無を確認する関数ではなく、指定した変数に値が設定されているかを確認するための関数ですが、対象の要素のキーが未使用の場合にも真偽値を返すため、配列内のキーの有無を確認する方法としても活用することができます。
それぞれの関数の主な違いは、 要素の値が nullの場合を許容するか否かにあります。
isset関数は、対象のキーが未使用の場合だけでなく、対応する値が nullの場合にも falseを返します。
一方、array_key_exists関数の場合は、対象のキーが未使用の時にだけ falseを返します。
以下のサンプルコードで、動きの違いを見てみましょう。
【サンプルコード】
$fruitsArray = [
'apple'=>'りんご',
'grape'=> null
];
var_dump(isset($fruitsArray['grape']));
var_dump(array_key_exists('grape', $fruitsArray));
【実行結果】
bool(false)
bool(true)
値が nullとなっている要素のキーを対象とした際に、それぞれの関数で結果が異なっているのが分かりますね。
キーが存在するか否かだけを正確に確認したい場合は array_key_exists関数、キーに対応する値が null でないことを合わせて確認したい場合は isset関数を活用するといいでしょう。
連想配列のキーの命名に関する注意事項
連想配列のキーを命名する際は、いくつかのポイントや注意点があります。
PHPでは、関数名やクラス名などの一部の機能において、大文字と小文字を区別しないという性質がありますが、連想配列のキーはこれには該当しません。
【サンプルコード】
$fruitsArray = [
'apple'=>'りんご',
'APPLE'=>'リンゴ'
];
echo $fruitsArray['apple']."\n";
echo $fruitsArray['APPLE']."\n";
【実行結果】
りんご
リンゴ
同じ単語でも、大小によって別のキーとして区別することができますが、その一方で大文字と小文字の違いが動作に影響する場合もあり得るため、注意が必要です。
また、キーの命名にはアルファベットだけでなく、マルチバイト文字と呼ばれる日本語などの文字や、数値を使用することもできます。
ただし、基本的にマルチバイト文字を使用することによる大きな問題はないものの、使用環境下の文字コードとの兼ね合いによっては思わぬ不具合が発生する可能性もゼロではありません。
そのため、特別な理由がない限りは、キーの命名にはアルファベットか数値のみを使用することをおすすめします。
なお、キーに数値を使用するケースで、インデックスでの管理を行う要素と混合している配列の場合、インデックスの番号が要素の格納順とは異なる場合があります。
【サンプルコード】
$fruitsArray = [
'りんご',
5=>'ぶどう',
'もも'
];
print_r($fruitsArray);
【実行結果】
Array
(
[0] => りんご
[5] => ぶどう
[6] => もも
)
通常、インデックスのみで管理する配列の場合は0から順に番号が割り振られますが、上記の例では途中で数値を使用したキーの指定が挟まっているため、その後に続く要素のインデックスが直前のキーの数値に影響されています。
このように、キーの指定によって他の要素のインデックスに影響が出る場合もあるため、指定の際には注意が必要です。
まとめ
いかがでしたか?今回は、PHPで連想配列を扱う方法について解説しました。
連想配列を含むそれぞれの配列は、PHPに限らず、プログラミングをする上で切っても切り離せない機能の1つとなっています。
実際の開発においても、おのずとよく使用される機能であるため、今回の記事で解説した使い方の基礎をしっかりと押さえ、活用できるようにしていきましょう。
PHPの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、PHPに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。