[PHP-users 20470]Re: PHP3とPHP4の違いについて
Seto
seto @ cii.gr.jp
2004年 2月 19日 (木) 21:34:31 JST
Setoです。
ちょうどPHP3の環境を作ったところなのでテストしてみました
記載されたスクリプトに1行追加してテストしてみたところ
>for( $i=0; $i < count($testarry); $i++ ) {
> echo $testarry[$i]["AAA"];
> echo $i."<br>";
>}
>
>echo "<br>COUNT".count($testarry)."<br>";
>
>unset($testarry[1]);
>
>echo "<br>COUNT".count($testarry)."<br>";
>
>reset($testarry);
>
>for( $i=0; $i < count($testarry); $i++ ) {
echo count( $testarry );
> echo $testarry[$i]["AAA"];
> echo $i."<br>";
>}
これをPHP4で実行すれば 普通に
h0
i1
j2
k3
l4
COUNT5
COUNT4
4h0
41 // 実際はここでNotice: Undefined offset: 1 が出てます
4j2
4k3
でPHP3だと
h0
i1
j2
k3
l4
COUNT5
COUNT4
4h0
41
5j2 // ここでcountの結果が変わってます。
5k3
5l4
つまりPHP3の場合(問題はunsetではなく)
$i = 1 のときに
echo $testarry[$i]["AAA"];
を実行した時点で 配列に要素の追加が行われているらしい
ことが問題のようですね。
この動作についてマニュアルに何か記載があるかどうかは
見つけられてませんが、ちょっと意外でした。
PHP3のときは私はforの中で毎回count()と比較しないで
forの前に $n = count(xx); しておいてforの中では$nと比較する
ようにしていました。それかeachを使うか。
とりあえず それならPHP3とPHP4で同じ動作になると思います。
新規でPHP4ならforeachですかね。
ソースの2重管理をするか、PHP3に戻すことを考えないなら
foreachに書き換えた方がPHP4らしくなるのでは。
回答ではないですが参考まで。
PHP-users メーリングリストの案内