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

sumi @ orihime.net sumi @ orihime.net
2003年 6月 2日 (月) 18:36:27 JST


SUMiです。自己レスです。

> この結果を見る限り、$array[]で配列に要素を追加する場合、unsetで削除した
> 配列番号は「存在するもの」として追加されているようですね。
> 
> $array[]形式での要素の追加の場合、最終項目として追加されると誤解していま
> した。

としたのですが、マニュアルをもう一度見返してみると、

http://jp.php.net/manual/ja/language.types.array.php
> キーを省略した場合、整数添字の最大値が使用され、新しいキーはそ の最大
> 値+1となります。整数値は負の数となる可能性があるため、 負の添字も有り
> えます。例えば、最高時の添字が-6 の場合、次のキーは-5となります。 整数
> 添字がまだ存在しない場合、キーは0(ゼロ)となります。 値が既に代入されて
> いるキーを指定した場合、元の値は上書きされます。 

となっています。

また、unsetのマニュアルには

http://jp.php.net/manual/ja/function.unset.php
> // 配列の要素の一つを破棄する
> unset ($bar['quux']);

という例もでていますし、

$array = Array( 'A', 'B', 'C' );
var_dump( $array );
unset( $array[sizeof($array)-1] );
var_dump( $array );

とした場合には、

array(3) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "C"
}
array(2) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
}

と、[2]が削除されています。
さらに続けて

$array[] = 'D';
var_dump( $array );

とした場合には

array(3) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>            <-- 2ではなく3?
  string(1) "D"
}

となってしまうのですが、この挙動はやはりおかしいのではないでしょうか。



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