LoginSignup
8
5

More than 5 years have passed since last update.

PHPで連想配列をforeachで回した時のkeyの型

Last updated at Posted at 2015-05-29
$array = array( '1' => 'hoge' );

というような連想配列があった場合、

foreach ( $array as $key => $value ) {
    if ( $key === '1' ) {
        echo( 'ゲッツ!!' );
    }
}

とすれば「ゲッツ」が出力されるかと思いきや、実は出力されない。

foreach ( $array as $key => $value ) {
    if ( $key === 1 ) {
        echo( 'ゲッツ!!' );
    }
}

とすると表示される。

どうもPHPのforeachの仕様として、連想配列のキーが数字だった場合、文字列として定義していても数値として扱われるらしい。

じゃあ、

$array = array( 
    '1' => 'hoge'
    , 1 => 'fuga'
);

みたいな配列を定義したらどうなんねん!?と思ってやってみたら、がっつり上書かれて

Array( [1] => fuga )

となった。

なので、以下みたいなコードはかなり注意が必要かも。

$array = array();
$array[] = 'hoge';
$array[] = 'fuga';
$array['1'] = 'foo';

当然、

Array( [0]=>hoge [1]=>foo )

となります。

まとめとしては、

  • 通常の配列と連想配列はごっちゃにしない
  • 比較にはstrcmpを使う

ということになるのかしら。

8
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5