核心:
$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;
}
网友评论