$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を使う
ということになるのかしら。