[PHP-dev 772]Re: $array[]とunset()の挙動について

Yasuo Ohgaki yohgaki @ ohgaki.net
2003年 6月 4日 (水) 08:16:18 JST


大垣です。

sumi @ orihime.net wrote:
> array_popとarray_pushを使用して、上記スクリプトと同様の動作をするスクリ
> プトを作成できるので、スクリプトの作成自体には困らないのですが、言語仕様
> (マニュアル)と挙動の差異は気持ち悪いのでポストさせていただきました。

気にしたことが無い(PHPの配列はLinked List順序付きのハッシュ)なので
この動作に疑問をもったことがありませんでした。

$arr[] = 'New element';

で数字添え字の最大値に変更することは無理ですがマニュアルは間際らしい?
のかも知れません。もう少しPHPの配列はLinked Listで順序をもつハッシュ
であることを強調した方がよいのかもしれません。

> ソースを確認していませんが、[PHP-users 15631]で小山さんも書かれているよ
> うに、内部的には配列の整数添字の最大値を別に確保し、キーを省略された場合
> にはその最大値+1の添字で要素をを追加する、という動作をしているのでしょう
> が、unsetで要素を削除された場合には最大値の変更を確認していないような動
> 作です。

配列はハッシュなので要素の挿入・削除はO(1)で実行されるべきですが、
記述された仕様にするには要素の挿入・削除にO(n)でしか実行できなく
なります。これではハッシュを使う意味が弱くなってしまいます。

--
Yasuo Ohgaki



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