* PHP/array_map()を使って複雑な構造の変数を処理 [#qeea1c92]
** array_map()とは? [#hb6374df]
function func1($val){
return $val * 10;
}
$arr = array(1,2,3);
$arr2 = array_map('func1',$arr);
print_r($arr2); // => [ 10, 20, 30 ]
**複雑な構造の変数を処理する [#h4670eab]
配列の中に(スカラ)変数や配列が混じってる場合にarray_map()を適用するには以下のようにする。
function func1($val){
if (is_array($val)){
$val = array_map('func1',$val);
}else{
$val = $val * 10;
}
return $val;
}
$arr = array('var1'=>1,'var2'=>2,'var3'=>array('var4'=>4,'var5'=>5));
print_r($arr); // => [ 1, 2, [ 4, 5 ] ]
$arr2 = array_map('func1',$arr);
print_r($arr2); // => [ 10, 20, [ 40, 50 ] ]
**$_REQUEST [#q5f84b85]
実際の使い所として、$_REQUESTの値をまとめてHTMLエスケープする場合には以下のようにする。
function esc($val){
if (is_array($val)){
$val = array_map('esc',$val);
}else{
$val = htmlspecialchars($val);
}
return $val;
}
$req = array_map('esc',$_REQUEST);
破壊的にする場合には、
function esc(&$val){
if (is_array($val)){
array_map('esc',&$val);
}else{
$val = htmlspecialchars($val);
}
}