[PHP-users 52] Re: ( 再送配列を POST等で渡す時の引数について

Naofumi Kondoh php-users@php.gr.jp
Thu, 14 Jun 2001 03:26:37 +0900


ソフト工房の近藤です。

おもしろいですね。

久保さんの環境は、PHP3 だったんですね。
PHP-users 24 に、foreach のように値のある物だ
けループ処理をしたい とあったので、てっきり、
PHP4 だと思い込んでました。


PHP Version 3.0.18-i18n-ja-2 で、foreach だけ
while(list($k,$v)=each($hoge)) に直して実行し
てみると、たしかに、久保さんと同じ結果になり
ました。

NAME が全部同じ名前として評価されて、かぶって
しまってますね。

対策ですが、
次のように、数字の先頭に、数字以外の文字をつ
けておけば、PHP3 でも、文字列の添字と認識され
るようなので、後で、explode か str_replace 
で、数字の部分だけ切出してやれば、PHP4 と同じ
結果になりそうです。

暗黙の型の言語にはいつも悩まされます。
MUMPS, PHP, JavaScrpt みんな問題です。
JavaScript だと、 '1' + 2 が、3 でなく、'12' になる。
PL/1 の暗黙の型変換にも変なのがあった
ような。
-------------------------------------------------------
<script language=PHP>
if (isset($hoge) && is_array($hoge)){
    while(list($k,$v) = each($hoge))
    {
        $idx = explode(':', $k);
        echo "hoge [ $k ] (".$idx[1].") is $v 。添字の型= ".gettype($k)."<br>";
    }
}
 
echo "<form action='./a.input.php3' method=post>";
echo "<input type=submit><br>";
$r = (double)111222333444555.0;
for($i=1; $i<=9; ++$i){
    $t = sprintf("<input type=text
        name=\"hoge[A:%15.0lf]\"
        value=\"%d\">", floor($r), $i*10);
    echo $t;
    echo htmlspecialchars($t);
    echo "<br>";
    $r = $r + 1.0;
}
echo "</form>";
</script>
。。。。。。。。。。実行結果。。。。。。。。。。
hoge [ A:111222333444555 ] (111222333444555) is 10 。添字の型= string
hoge [ A:111222333444556 ] (111222333444556) is 20 。添字の型= string
hoge [ A:111222333444557 ] (111222333444557) is 30 。添字の型= string
....略....

 <input type=text name="hoge[A:111222333444555]" value="10">
 <input type=text name="hoge[A:111222333444556]" value="20"> 

-------------------------------------------------------
kenkubo@n-verde.co.jp wrote:
> 
> お世話様です。久保です。

> 試してみましたが、上手く文字列として扱ってくれないようです。
> 結果は以下の様になりました。
> -----------------SUBMIT 結果-----------------------------
> hoge [ 2147483647 ] is 90 。添字の型= integer
> 
> <input type=text name="hoge[111222333444555]" value="10">
> <input type=text name="hoge[111222333444556]" value="20">
> <input type=text name="hoge[111222333444557]" value="30">
> ---------------------------------------------------------
> 
> php-3.0.18-i18n-ja-2 なので、foreach は使えず以下の様に
> 書き換えています。

(snip)

> 結論としては php4 だと文字列として扱ってくれるという事でしょうか。
> php4 に乗り換える良い機会なのかも知れません。
> セキュリティーの問題もありますし。


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文   Email:  nkon@shonan.ne.jp 
          http://www.SOFTKOUBOU.co.jp/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/