👀

PHP array_keysで取得したstring型"1"が、integer型の1に変換されていた件

2022/04/22に公開

はじめに

タイトルが全てです.
型が変わることによって、動作がうまくいかなった為、こちらにて残しておきます。

key取得の例

$test = 
['fruits' => 'Apple', 'sports' => 'Tennis'];

上記はよくある連想配列の例です。

上記のkeyを取得したい場合、

$keys = array_keys($test);

print_r($keys);
    
// 実行結果
Array
(
    [0] => fruits
    [1] => sports
)

上記のようにkeyが取得できます。
このkeyは、fruits、sportsという文字列です。

echo gettype($keys[0]);

// 実行結果
string

上記は問題ありません。
本題は下記になります。

本題

$test = 
['1' => 'Apple', '2' => 'Tennis'];

キーを文字列の1、2として設定します。
上記のkeyを取得したい場合、

$keys = array_keys($test);

print_r($keys);
    
// 実行結果
Array
(
    [0] => 1
    [1] => 2
)

こちらもこのようにkeyが取得できます。
それでは、このkeyの1,2の型は何でしょうか。

調べてみると

echo gettype($keys[0]);

// 実行結果
integer

integer型、つまり整数に変わってしまいます。
1番目のパラメーターとして認識されてしまっております。

さいごに

array_keysに限らず、数値をkeyに取得すると、整数になるということが勉強になりました。
keyを取得して、if文で比較を行う際など、
急に型が変わって不具合が起きる、なんてこともありますので、注意していきたいです。

Discussion