美文网首页
分享一个自己解析ini文件的函数

分享一个自己解析ini文件的函数

作者: 金星show | 来源:发表于2019-02-22 12:22 被阅读0次

核心:

$arr = [
    "fold1.fold2.fold3",
    "fold1.fold2.fold4",
    "fold1.fold6.fold5"
];

$data = [];
foreach($arr as $value){
    $dere_value = explode('.',$value);
    $tmp = &$data;
    foreach($dere_value as $value1){
        if(!isset($tmp[$value1])){
            $tmp[$value1] = [];
        }
        $tmp = &$tmp[$value1];
    }
    $tmp = '';
}

var_dump($data);

本函数支持将ini文件解析成相应的数组结构:
test.ini:

[first_section]
one=1
two=2
name=test

[second_section]
path=/tmp/test
url=http://test.com/login.php

[third_section]
php_version[]=5.0
php_version[a]=5.1
php_version[]=5.5

[dictionary]
foo[debug]=true
foo[path]=/some/path

[fourth_section]
fold1.fold2.fold3=a
fold1.fold2.fold4=b
fold1.fold2.fold5=b

parse.php
以下是简化版的分析,可以加上异常处理,留给有心人加吧,碰巧看到鸟哥实现yaconf的配置项目,自己就实现一下多模块解析文件,支持上述结构。

$arr = zj_parse_ini('test.ini',true);
var_dump($arr);

function zj_parse_ini($ini,$check_type = false){
    $data = file($ini);
    if($check_type == true){
        foreach($data as $value){
            $value = trim($value);  
            if(preg_match('/^\[/i', $value)){
                $value = ltrim($value,"[");
                $value = trim($value,']');
                $result[$value] = [];
            }
            if(strchr($value,'=')){
                $temp = explode('=',$value);
                if(preg_match('/(.*)\[(.*)\]/i', $value,$match)){
                    $key = array_keys($result); 
                    $key = end($key);
                    if(!empty($match[2])){
                        $result[$key][$match[1]][$match[2]] = trim($temp[1]);
                    }else{
                        $result[$key][$match[1]][] = trim($temp[1]);
                    }
                }elseif(strchr($value,'.')){
                    $dere_value = explode('.',$temp[0]);
                    $key = array_keys($result); 
                    $key = end($key);
                    $temp2 = &$result[$key];
                    foreach($dere_value as $value1){
                        if(!isset($temp2[$value1])){
                            $temp2[$value1] = [];
                        }
                        $temp2 = &$temp2[$value1];
                    }
                    $temp2 = trim($temp[1]);
                }else{
                    $key = array_keys($result); 
                    $key = end($key);   
                    $result[$key][$temp[0]] = trim($temp[1]);
                }   
            }
        }
    }else{

    }
    return $result;
}

相关文章

网友评论

      本文标题:分享一个自己解析ini文件的函数

      本文链接:https://www.haomeiwen.com/subject/rekleqtx.html