递归清理前端请求数据

117 阅读1分钟
    /**
     * 多维数组数据处理
     *
     * @param   $arr 需要处理的数据数组(多维数组)
     * @param   $is_del 直接删除还是置空
     * @param   $error_type 需要处理的数据规则
     * @return
     */
    public static function cleanData($arr, $is_del = true, $error_type = [])
    {
        if (empty($arr)) {
            return [];
        };
        if (!empty($error_type)) {
            $errorType = $error_type; //允许外部传递要删除的规则
        } else {
            $errorType = ['','undefined','undefind', 'null', 'none', 'false', '0'];
        }
        //循环处理数据
        foreach ($arr as $key => $value) {
            //判断如果是数组循环判断
            if (is_array($arr[$key])) {
                $newdata = self::cleanData($value, $is_del, $errorType);
                if (!empty($newdata)) {
                    $arr[$key] = $newdata;
                } else {
                    unset($arr[$key]);
                }
            } else {
                $value = trim($value);
                if (in_array(strtolower($value), $errorType)) {
                    //判断是置空还是直接删除
                    if ($is_del) {
                        unset($arr[$key]); //如果存在处理的数据、直接干掉
                    } else {
                        $arr[$key] = '';
                    }
                } else {
                    $arr[$key] = self::filterMeme($value);
                }
            }
        }
        return $arr;
    }