【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
の値に応じて以降の処理を分岐することで、存在しないキーへのアクセスを回避できます。