[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/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/