4

インデックスが文字列「0」の場合、配列の要素にアクセスできないというこのバグに遭遇しました。

これは、コードを呼び出さずにコードで発生したため、シリアル化解除のバグでもありません。

$arr = unserialize('a:1:{s:1:"0";i:5;}');
var_dump($arr["0"]); //should be 5, but is NULL
var_dump($arr[0]);   //maybe this would work?  no. NULL

ここで何か間違ったことをしていますか?配列のこの要素にアクセスするにはどうすればよいですか?

4

3 に答える 3

6

はい、PHP の文字列から整数への自動変換に関連するバグのようです。詳細については、http: //bugs.php.net/bug.php?id=43614をご覧ください。

var_dump( $arr ); // => array(1) { ["0"]=>  int(5) } 
$arr2["0"]=5;
var_dump($arr2); // => array(1) { [0]=>  int(5) } 
print serialize($arr2); // a:1:{i:0;i:5;}

そのため、古いバージョンの PHP5 では、文字列インデックスから整数インデックスへの変換をアンシリアライズで実行していないようです。

このバグは PHP 5.2.5 で報告され、PHP 5.2.6 で修正されています ( http://www.php.net/ChangeLog-5.php#5.2.6を参照)。

于 2008-11-25T04:09:15.930 に答える
1

構造体で var_dump を使用して、それがどのように表現されているかを確認します。たぶんそれが役立つでしょう。Data::Dumper でこのような問題が発生したとき、Perl で同じことをしていました。

于 2008-11-25T04:07:53.407 に答える
0

実際、あなたの質問のコードは

int(5)
于 2008-11-25T04:03:10.657 に答える