[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 メーリングリストの案内