【PHP】連想配列 - キーが文字列の配列

【PHP】連想配列 - キーが文字列の配列

配列のキーには文字列を使うことができ、そのような配列を“連想配列”と呼びます。

ここでは、連想配列について解説します。

検証環境

連想配列

連想配列はキーが文字列の配列です。

使い方は通常の配列と同じですが、初期化時はキーを省略しません。

連想配列の生成

通常の配列と同様の方法で生成できます。

基本構文

変数 = array()
変数 = []

サンプル

<?php
 
___ih_hl_start
$fruits = [];
___ih_hl_end
 
var_dump($fruits);
 
?>
$ php sample.php
array(0) {
}

生成の構文や実行結果から分かるように、連想配列はキーが数値の通常の配列と同様に配列型です。

配列の初期化

キーに文字列を使うため、キーを省略しない初期化構文を使用します。

基本構文

変数 = [ 
    文字列キー1 => 値1,
    文字列キー2 => 値2,
    文字列キー3 => 値3
    ...
]

サンプル

<?php

___ih_hl_start
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];
___ih_hl_end
 
var_dump($fruits);
 
?>
$ php sample.php
array(3) {
  ["Apple"]=>
  int(150)
  ["Orange"]=>
  int(100)
  ["Melon"]=>
  int(2300)
}

3〜7行目が連想配列の初期化です。

実行結果からキーと値をセットで記憶したことが分かります。

値の取得

連想配列の値を取得するには、キーを指定します。

基本構文

変数[文字列キー]

サンプル

<?php
 
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];

___ih_hl_start
echo $fruits['Apple'] . "\n";
echo $fruits['Orange'] . "\n";
echo $fruits['Melon'] . "\n";
___ih_hl_end
 
?>
$ php sample.php
150
100
2300

9〜11行目で連想配列の各値を取得し、出力しています。

値の記憶

連想配列の値を記憶するには、キーを指定して値を代入します。

基本構文

変数[文字列キー] = 値

既に同じ文字列キーが存在する場合は値を上書きし、存在しない場合は新しい記憶領域に指定した文字列キーで値を記憶します。

サンプル

<?php
 
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];

var_dump($fruits);

___ih_hl_start
$fruits['Orange'] = 200;
$fruits['Pineapple'] = 1200;
___ih_hl_end

echo "-------------------------\n";
 
var_dump($fruits);
 
?>
$ php sample.php
array(3) {
  ["Apple"]=>
  int(150)
  ["Orange"]=>
  int(100)
  ["Melon"]=>
  int(2300)
}
-------------------------
array(4) {
  ["Apple"]=>
  int(150)
  ["Orange"]=>
  int(200)
  ["Melon"]=>
  int(2300)
  ["Pineapple"]=>
  int(1200)
}

11〜12行目が連想配列への値の代入です。

11行目は既存の文字列キーに対して値を代入しているため、元の値が上書きされ、12行目は新しい文字列キーで値を追加しています。

1回目と2回目のvar_dump関数の出力を比較すると、値の上書き、追加ができていることが分かります。

連想配列のサイズ

連想配列のサイズは通常の配列と同様にcount関数で取得できます。

<?php
 
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];

___ih_hl_start
echo count($fruits) . "\n";
___ih_hl_end
 
?>
$ php sample.php
3

注意点

値の取得時に存在しない文字列キーを指定するとエラーが発生します。

<?php
 
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];

echo $fruits['Pineapple'] . "\n";
 
?>
$ php sample.php
PHP Warning:  Undefined array key "Pineapple" in sample.php on line 9

Warning: Undefined array key "Pineapple" in sample.php on line 9

このエラーの原因は存在しない$fruitsに存在しない'Pineapple'というキーにアクセスしたことです。

このようなエラーを避けるには事前にキーが存在するかどうかをarray_key_exists関数で確認します。

関数が未学習の方は、ここでは記法と処理内容のみ覚えていただければ問題ありません。

array_key_exists(キー, 変数);

array_key_exists関数は丸括弧(())内に指定したキー変数(配列)に存在する場合はtrue、存在しない場合はfalseを取得します。

<?php
 
$fruits = [ 
    'Apple'  => 150,
    'Orange' => 100,
    'Melon'  => 2300
];

___ih_hl_start
$is_exist = array_key_exists('Pineapple', $fruits);
___ih_hl_end

echo '[ $is_exist ]'."\n";
var_dump($is_exist);

if( $is_exist ) {
    echo $fruits['Pineapple'] . "\n";
} else {
    echo "文字列キー'Pineapple'は存在しません。\n";
}
 
?>
$ php sample.php
[ $is_exist ]
bool(false)
文字列キー'Pineapple'は存在しません。

9行目のarray_key_exists関数で$fruits'Pineapple'というキーが存在するか確認しています。

その結果を$is_existに代入し、$is_existの値に応じて以降の処理を分岐することで、存在しないキーへのアクセスを回避できます。