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