[PHP-dev 774]Re: $array[]とunset()の挙動について
sumi @ orihime.net
sumi @ orihime.net
2003年 6月 4日 (水) 12:05:16 JST
SUMiです。おはようございます。
大垣さん、うめばやしさん、ありがとうございます。
大垣さんの書かれた
> 気にしたことが無い(PHPの配列はLinked List順序付きのハッシュ)なので
> この動作に疑問をもったことがありませんでした。
という「PHPの配列はLinked List順序付きのハッシュ」であることは理解してい
ます。ですから、実際に現在の挙動になることも理解しています。
ただ、マニュアルには
> キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最大
> 値+1となります。整数値は負の数となる可能性があるため、 負の添字も有り
> えます。例えば、最高時の添字が-6 の場合、次のキーは-5となります。 整数
> 添字がまだ存在しない場合、キーは0(ゼロ)となります。 値が既に代入されて
> いるキーを指定した場合、元の値は上書きされます。
となっているので、
array(2) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
}
この配列に対して
$array[] = 'D';
という動作を行った場合に
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[3]=>
string(1) "D"
}
という結果になるのは、(それまでにこの配列に対してどういう操作を行ったか
に関わらず)(マニュアルに照らし合わせると)おかしいのではないか、という
ことを言いたいのです。
マニュアルの
> キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最大
> 値+1となります。
この部分が、あえてくどい書き方ですが
> キーを省略した場合、「その配列に使用されている、もしくは使用されていた」
> 整数添字の最大値が使用され、新しいキーはそ の最大値+1となります。
となっており、「現在の整数添字の最大値+1のキーが保証されるわけではない」
という意味を含めていれば問題ないと思います。
うめばやしさんの書かれた
> 全然バグなどではありませんです。
ということはもっともなのですが、これが「仕様」であるならば、誤解を招くマ
ニュアルの記述はいかがなものかと。
# なんつーか、重箱の隅をつついたような話になってしまいましたが、粘着とか
# 言わんで下さいね ^^;
あと、配列に絡んでもう一件ですが、マニュアルの同じページに
> 整数値は負の数となる可能性があるため、 負の添字も有りえます。例えば、
> 最高時の添字が-6 の場合、次のキーは-5となります。
という記述と
> array( [key =>] value
> , ...
> )
> // key は string または非負の 整数のどちらか
> // value は何でも可
という記述があります。
実際に
$array = Array( -6 => 'A', 'B' );
もしくは
$array[-6] = 'A';
$array[] = 'B';
とすればいずれも
array(3) {
[-6]=>
string(1) "A"
[0]=>
string(1) "B"
[1]=>
string(1) "C"
}
となりますので、-6はstringとして扱われているようなので負の整数の添字が作
成できません。配列関数を確認したのですが、負の整数の添字を作れそうな関数
もありませんでした。どのような場面で負の整数の添字が出てくるのでしょうか?
PHP-dev メーリングリストの案内