본문 바로가기

'.' Programs/PHP

다차원 배열의 모든 값을 지정함수로 필터처리

$_REQUEST 된 값을 일괄 trim() 처리하거나 addslashes() 하려고 만들었습니다.
user_function() 을 만들어서 값들의 유효성 검사나 기타 디테일한 필터링이 가능합니다.
array_filter() 라는 PHP 함수로 비슷한 효과를 보려 했는데, 잘 되지 않더군요. 왜인지는 모르겠습니다.

정리하자면,

1. 리크루시브 함으로서 x차원의 배열을 모두 적용할 수 있다.
2. 필터링용 함수를 x개 지정할 수 있으며, 순차적으로 실행된다.

/* $arr 배열의 모든 값을 ,로 구분된 $funcs 함수목록으로 필터링한다.
----------------------------------------------------------------
$arr = 필터링이 필요한 배열
$funcs = ','로 구분된 함수목록 (예: "trim,addslashes,urlencode,md5,[기타펑션]")
*/
function Q_array_filter($arr, $funcs) {

$funcs_arr = explode(',', $funcs);
if(!$func_cnt = count($funcs_arr)) return false;

foreach ($arr as $key => $val) {
if (is_array($arr[$key])) {
$arr[$key] = Q_array_filter($arr[$key], $funcs);
} else {
for ($i=0; $i<$func_cnt; $i++) {
if (!function_exists($funcs_arr[$i])) continue;
$func = $funcs_arr[$i];
$arr[$key] = $func($val);
}
}
}
return $arr;
}


다음은 특정 다차원 배열을 Q_array_filter($arr, 'trim,stripslashes,urlencode') 처리하기 전과 후의 모습입니다.
-------------------------------------------------------------------------
dbg output
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)

)

[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)

)

)

)


dbg output2
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)

)

[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)

)

)

)

참고 : array_walk_recursive  함수

 

출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=41945&sca=%C7%D4%BC%F6&page=26