[PHP] array_map 대체 목적으로 만들어본 array_add_callback 함수
쇼핑몰 솔루션을 하나 작업중인데.. 보통 PHP + MySQL 환경에서는 데이터를 DB에 입력하기 전에 injection을
막기 위해 mysql_real_escape_string()를 각 데이터에 적용을 해주게 된다. form에서 넘겨운 데이터는 Array의
형태이므로 일반적인 경우에는 아래와 같이 사용하면 쉽게 mysql_real_escape_string()를 적용할 수 있다.
<?php
$_POST = array_map(“mysql_real_escape_string”, $_POST);
?>
또는 foreach 구문을 사용해도 된다.
<?php
foreach ($_POST as $key => $value){
$_POST[$key]=mysql_real_escape_string($value);
}
?>
그런데 만약 form에서 넘어온 데이터 중에 또 다른 Array이 있다면 위와 같은 구문으로 해결이 안된다. 그럴 때
사용하기 위해서 함수를 하나 만들었다. 테스트상에서는 이상이 없는 듯 한데 좀 더 테스트를 해봐야 한다.
<?php
function array_add_callback($func, $array)
{
if(!$func) {
return;
}if(is_array($array)) {
foreach($array as $key => $value) {
if(is_array($value)) {
$array[$key] = array_add_callback($func, $value);
} else {
$array[$key] = call_user_func($func, $value);
}
}
} else {
$array = call_user_func($func, $array);
}return $array;
}?>
php의 call_user_func()를 이용해서 변수로 넘겨받은 함수를 실행하도록 했다. 이렇게 해야 다양하게 적용할 수 있다.
아래는 실제 테스트에 사용했던 코드이다. 배열안에 배열 그 안에 또 배열이 있는 경우에도 원하는대로 작동한다.
<?php
function add_string($value)
{
$value = ‘==’.$value.’==’;
return $value;
}function array_add_callback($func, $array)
{
if(!$func) {
return;
}if(is_array($array)) {
foreach($array as $key => $value) {
if(is_array($value)) {
$array[$key] = array_add_callback($func, $value);
} else {
$array[$key] = call_user_func($func, $value);
}
}
} else {
$array = call_user_func($func, $array);
}return $array;
}$array = array(“car”, “bike”, array(“man”, “woman”, array(“adult”, “kid”)), “cycle”);
echo “Before..<br />”;
print_r($array);echo “<br /><br />”;
$array = array_add_callback(“add_string”, $array);
echo “After..<br />”;
print_r($array);
?>