[PHP-users 27406] Re: 多次元配列のキー確認方法について
Seto
seto @ 1kg.jp
2005年 11月 7日 (月) 15:37:54 JST
Setoです。
あああ、すみません。確かに変な動作してますね。
<?php
$ary[1][2] = 'abcd';
if ( isset( $ary[1][2][3] ) ) echo "isset!\n";
else echo "not set!\n";
debug_zval_dump( $ary );
debug_zval_dump( $ary[1] );
debug_zval_dump( $ary[1][2] );
debug_zval_dump( $ary[1][2][3] );
?>
結果
isset!
array(1) refcount(2){
[1]=>
array(1) refcount(1){
[2]=>
string(4) "abcd" refcount(1)
}
}
-----------------
array(1) refcount(2){
[2]=>
string(4) "abcd" refcount(1)
}
-----------------
string(4) "abcd" refcount(2)
-----------------
string(1) "d" refcount(1)
となりましたので
文字列の要素を指し示してしまうようですね。
ためしに
if ( isset( $ary[1][2][9] ) ) echo "isset!\n";
else echo "not set!\n";
とかやると
not set!
ってなるんですけど、それはたまたま文字列の長さより大きかったからで
変数として存在しないのとは意味が違いますね。
とりあえず地道にforeach で回すしかないような。
#[PHP-users 27404]さりさんのコードだとキーが数字に限られてしまいますね。
#今までの自分のコードでどっかに問題コードがありそうな。。。憂鬱
>オカムラです。
>
>--- Seto <seto @ 1kg.jp> からのメッセージ:
>> Setoです。
>>
>> 単純に isset( $ary['1']['a']['A'] )
>> ではまずいでしょうか。
>
>テストしてみましたが、
>$ary['1'] = 'test';
>では、FALSEになりますが、
>$ary['1']['a'] = 'test';
>では、TRUEが返ってきます。
>そのこと自体も不思議ですが、上手くいかないようです。
>
>if (isset($ary['1']['a']['A'])) {
> print('set');
>} else {
> print('unset');
>}
>
>
>--------------------------------------
>Yahoo! Mail - supported by 10million people
>http://pr.mail.yahoo.co.jp/10m/
>
>_______________________________________________
>PHP-users mailing list PHP-users @ php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://www.php.gr.jp/php/novice.php3
Junya Seto
PHP-users メーリングリストの案内