[PHP-users 15628]Re: unset()の挙動

SUMi sumi @ orihime.net
2003年 6月 2日 (月) 20:44:56 JST


SUMiです。

> 
>   小山です。

こんばんは。

> At Mon, 02 Jun 2003 18:13:08 +0900,
> sumi @ orihime.net wrote:
> > この結果を見る限り、$array[]で配列に要素を追加する場合、unsetで削除した
> > 配列番号は「存在するもの」として追加されているようですね。
> > 
> > $array[]形式での要素の追加の場合、最終項目として追加されると誤解していま
> > した。
> 
>   「最終項目」が何を指すかによるかと思いますが、PHP のマニュアルには

「最終項目」というのは下のマニュアルの説明のことを言いたかったのです。

> http://www.php.net/manual/ja/language.types.array.php
> | キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最
> | 大値+1となります。
> 
> としっかり書かれています。途中 unset() で葉抜けになってしまった要素が
> あったとしても、最大値は変わらないということですね。

unsetで最大値が変わらない=歯抜けの部分に新規追加されるわけではないとい
うことも、理解していました。
ただ、今回の場合は「歯抜け」ではなく「最終要素の削除」なので、キーを省略
して新しく要素を追加した場合は、最大値+1になるはずでは?と疑問に思ってい
ます。

unsetが「要素を削除」するのではなく、「undefinedな値にする」というのなら
納得もいくのですが、そうでもないですし。

「これがPHPのarrayの扱いの仕様なんじゃ!」と言われればそれまでなんですが、
仕様にしてもどうも釈然としません。



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