../ |
---|
連想配列(個人的にassociation listと呼んだ方が親しみがある)を使って、該当するキーがないときにnullなどを返すようにしたい。例えば、以下のような連想配列$arr
からFrench
で検索すると、「PHP Notice: Undefined index: French」のエラーが出る。
$arr = [
'Japanese' => 'こんにちは',
'English' => 'Hello'
];
echo $arr['Japanese'].PHP_EOL;
echo $arr['French'].PHP_EOL;
そこでUndefined indexのエラーを出さないように、以下のコードが考えられる。getValue1()
とgetValue2()
である。
function getValue1(array &$arr, string $key): string {
if (isset($arr[$key])){
return $arr[$key];
}
return '';
}
function getValue2(array &$arr, string $key): string {
foreach ($arr as $k => $v) {
if ($key == $k){
return $v;
}
}
return '';
}
echo getValue1($arr, 'Japanese').PHP_EOL;
echo getValue1($arr, 'French').PHP_EOL;
echo getValue2($arr, 'Japanese').PHP_EOL;
echo getValue2($arr, 'French').PHP_EOL;
getValue1()のコードと、getValue2()のコードでは、どちらが効率いいのだろうか。一般に、getValue1()のようなコードをよく見かけるが、内部的には2回ループしているはずだ。
getValue2()の方は、1回のループで実現できているので効率がよさそうに思える。しかし、変数へバインドする負荷があるので微妙だ。どちらがお勧めなのかな。
(追記)Null合体演算子やarray_key_exists()も有効
コメント欄にアドバイスをいただきました。array_key_exists()やNull合体演算子も有効そうです。
連想配列がHashで実装されているなら、getValue2()ようなforeachで回すよりも、getValue1()のようなコードやNull合体演算子の利用の方が効率良さそうです。
../ |
---|