[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);
?>

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.