[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 メーリングリストの案内