[PHP-users 27405] Re: 多次元配列のキー確認方法について

Satoshi Nishimura nishimura @ n314.com
2005年 11月 7日 (月) 15:34:18 JST


西村です。

> テストしてみましたが、
> $ary['1'] = 'test';
> では、FALSEになりますが、
> $ary['1']['a'] = 'test';
> では、TRUEが返ってきます。
> そのこと自体も不思議ですが、上手くいかないようです。
> 
> if (isset($ary['1']['a']['A'])) {
> 	print('set');
> } else {
> 	print('unset');
> }

http://php.net/language.types.string
$ary['1']['a']=文字列; の文字は $ary['1']['a']{0} でも参照でき、
「過去の互換性のため、配列括弧を使用することが可能です。」
とあるので$ary['1']['a'][0]でも参照できます。
'test'をint型にキャストするとゼロになるので
$ary['1']['a'][(int)'A']、要は$ary['1']['a']{0}と解釈されているみたいです。
上の例でvar_dump($ary['1']['a']['A'])としてみると't'が出力されます。

配列かどうかを確かめればいいので
if (is_array($ary['1']['a']) && isset($ary['1']['a']['A']))
とするといいんじゃないでしょうか。

ただし
$ary['1']['a']['A'] = null;
が存在してもfalseになるので、
これも検出したい場合はarray_key_exists()を使わないといけないかもしれません。


-------------------------------
西村 悟
nishimura @ n314.com
 



PHP-users メーリングリストの案内