[PHP-users 15449]Re: $HTTP_POST_VARSなどをarray_map()で処理する場合の問題について
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2003年 5月 22日 (木) 19:42:29 JST
こんばんわ、桝形です。
> 以上の私の環境に基づく事実、
>
> (1) $HTTP_XXX_VARS は常に配列
> (2) array_map() は高速で、入れ子の問題も解決
>
> から、array_map() を使いたいと思ったのですが、
> [PHP-users 13915] からの一連のスレッドを見ると、array_map() は
> 参照渡し仕様上できない、ということのようです。
>
> 振りが大変長くなりましたが、
>
> (1), (2) は、そうであると期待して差し障りはありませんか?
自分もそうだと思っていたのですが。。。下に続きます。
> $HTTP_GET_VARS あたりは、値渡しで、上書きは可能でしょうか?
> それとも、一旦コピーをとる必要があるのでしょうか?
>
> 実際には以下のコードで処理したいと考えています。
> アドバイスよろしくお願いいたします。
>
> function remove_null($str) {
> return str_replace("\0", ``, $str);
> }
>
> function sanitize($ary) {
> if (get_magic_quotes_gpc()) {
> $ary = array_map('stripslashes', $ary);
> }
> return array_map('remove_null', $ary);
> }
>
> $get = sanitize($HTTP_GET_VARS); // 値渡しになる?
【環境】
OS : RedHat Linux6.2J
Apache : 1.3.27
PHP : 4.3.2RC3( DSO )
上記のサンプルを少し加工し、
<?
function remove_null($str) {
return str_replace( "\0", ``, $str);
}
function sanitize($ary) {
if (get_magic_quotes_gpc()) {
$ary = array_map('stripslashes', $ary);
}
return array_map('remove_null', $ary);
}
function hoge($get) {
global $HTTP_GET_VARS;
print_r($HTTP_GET_VARS);
$HTTP_GET_VARS = $get;
}
print_r($HTTP_GET_VARS);
$get = sanitize($HTTP_GET_VARS);
print_r($get);
hoge($get);
print_r($HTTP_GET_VARS);
?>
http://www.example.com/test.php?W[][][]=1&X[][]=1&Y[]=1&Z=1
とすると、結果が、
---------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 1
)
)
)
[X] => Array
(
[0] => Array
(
[0] => 1
)
)
[Y] => Array
(
[0] => 1
)
[Z] => 1
)
---------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
)
[X] => Array
(
[0] => Array
)
[Y] => Array
(
[0] => 1
)
[Z] => 1
)
---------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 1
)
)
)
[X] => Array
(
[0] => Array
(
[0] => 1
)
)
[Y] => Array
(
[0] => 1
)
[Z] => 1
)
---------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
)
[X] => Array
(
[0] => Array
)
[Y] => Array
(
[0] => 1
)
[Z] => 1
)
---------------------------------------------------------------------
と、なりました( 分かりにくくてすみません )。
この動作からすると、array_mapは配列が深すぎると駄目な
動作をしてるようですねぇ。。。使い方間違ってます?
動作的に
> $HTTP_GET_VARS あたりは、値渡しで、上書きは可能でしょうか?
は、満たせていそうです。
毎度の事ですが、あまり参考にならなくてすみません。
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内