分组配置文件合并

浏览:1988 发布日期:2013/06/11 分类:技术分享
thinkphp中试用C方法来合并全局配置文件和分组中的配置文件,但是C方法是试用array_merge来合并数组,但是配置中是存在二维数组的,比如全局配置文件中存在:'TMPL_PARSE_STRING' => array(
        '!-PUBLIC-!' => '/core/Public'
    )
,而分组配置文件中存在: 'TMPL_PARSE_STRING' => array(
        '!-Public-!' => BASE_LIB_PATH. 'Tpl/Public'
    )
,这时在分组项目中将取不到全局中定义的!-PUBLIC-!(显示的是默认值“/Public”)。
建议ThinkPHP能修改这部分。
先暂时可在thinkphp的common.php文件中添加一个自定义方法,/**
 *    多维数组 合并
 *
 *    支持 参数 和 array_merge 一样  2个参数以上 后面覆盖前面的
 *
 *    返回值 数组
 **/
function array_merge_multi() {
    $args = func_get_args();

    if ( !isset( $args[0] ) && !array_key_exists( 0, $args ) ) {
        return array();
    }

    $arr = array();
    foreach ( $args as $key => $value ) {
        if ( is_array( $value ) ) {
            foreach ( $value as $k => $v ) {
                if ( is_array( $v ) ) {
                    if ( !isset( $arr[$k] ) && !array_key_exists( $k, $arr ) ) {
                        $arr[$k] = array();
                    }
                    $arr[$k] = array_merge_multi( $arr[$k], $v );
                } else {
                    $arr[$k] = $v;
                }
            }
        }
    }
    return $arr;
}
,并修改C方法如下:function C($name = null, $value = null)
{
    static $_config = array();
    // 无参数时获取所有
    if (empty($name)) {
        if (!empty($value) && $array = S('c_' . $value)) {
            $_config = array_merge($_config, array_change_key_case($array));
        }
        return $_config;
    }
    // 优先执行设置获取或赋值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtolower($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : null;
            $_config[$name] = $value;
            return;
        }
        // 二维数组设置和获取支持
        $name = explode('.', $name);
        $name[0] = strtolower($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
        $_config[$name[0]][$name[1]] = $value;
        return;
    }
    // 批量设置
    if (is_array($name)) {
       // $_config = array_merge($_config, array_change_key_case($name));
        $_config=array_merge_multi($_config, array_change_key_case($name));
        if (!empty($value)) { // 保存配置值
            S('c_' . $value, $_config);
        }
        return;
    }
    return null; // 避免非法参数
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>