📘

PHPの連想配列のキーはキャストされるらしい

2022/03/17に公開

背景

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を指定した場合もキャストされてしまうようです.
https://www.php.net/manual/ja/language.types.array.php

連想配列のキーを取り出した後で,stringにキャストし直すとか注意しないといけないですね.

株式会社ゆめみ

Discussion