[PHP-users 15662]Re: unset()の挙動
sumi @ orihime.net
sumi @ orihime.net
2003年 6月 3日 (火) 15:37:48 JST
SUMiです。
> 小山です。
こんにちは。
> おそらく、配列内部にこれまでの最大整数値を持ってる実装なんじゃないか
> と考えてソースを追いかけてみたのですが、よくわかりませんでした。(笑)
わざわざありがとうございます。
> ドキュメントの
>
> http://www.php.net/manual/ja/language.types.array.php
> | キーを省略した場合、整数添字の最大値が使用され、新しいキーはその最
> | 大値+1となります。
>
> を仕様とするならば、この挙動はあきらかにおかしいのでバグと呼んでもよい
> と思います。しかし、では正しく実装しようとすると、結局配列内の全要素を
> 舐めなければいけないので、それもなんだかなぁという感じです。
確かに、実装が面倒で負荷がかかりそうですね。
なんでもよしなにやってくれるPHPだけに、こういう細かいつつきかたをすると
イレギュラーが出るというかなんというか。
> とりあえずユーザ側で全舐めしてキーの最大整数値を求めるのは簡単なので、
> どうしてもその必要があれば、私ならそうしますかねぇ。
>
> function greater_index(&$array)
> {
> if (!is_array($array)) {
> return null;
> }
> $max = 0;
> foreach ($array as $key => $val) {
> if (is_int($key) && ($key > $max)) {
> $max = $key;
> }
> }
> return $max;
> }
>
> こんな感じ。
サンプルスクリプトまでありがとうございます。
今回作成しようとしていたものはarray_pushとarray_popで実装できるんですが、
$array[]とunsetを使用したほうが速いかも、とベンチを取っていたところでぶ
つかっていました。
このまま放置しておくのは気持ち悪いので、php-devにも投げてみましたがさて
どうなるやら。
PHP-users メーリングリストの案内