📘
PHPの連想配列のキーはキャストされるらしい
背景
PHPで連想配列のキーをゴニョゴニョいじっていると,intとstringが混在してしまいました.調べてみたところ,どうやらキャストされてしまうようです.
環境
PHP 8.1.3
連想配列のキーをstringにしてみるがintになる
例えば国名をマスタデータとしてDBで扱う場合,コードと国名で変換できるようにしているシステムはあるかと思います.それをPHPで連想配列にした場合,
<?php
$countryList = [
'001' => '日本',
'002' => '韓国',
'099' => 'フランス',
'100' => 'ブラジル',
'110' => 'カナダ',
];
var_dump($countryList);
結果
array(5) {
["001"]=>
string(6) "日本"
["002"]=>
string(6) "韓国"
["099"]=>
string(12) "フランス"
[100]=>
string(12) "ブラジル"
[110]=>
string(9) "カナダ"
}
とキーはstringにしたはずなのに,連想配列に保存すると100
,110
はintになってしまいました.
詳細は日本語マニュアルにも記載がありますが,他にもキーに少数やboolを指定した場合もキャストされてしまうようです.
連想配列のキーを取り出した後で,stringにキャストし直すとか注意しないといけないですね.
Discussion