php parse string,PHP: parse_ini_string - Manual

parse_ini_string_m is analog for a parse_ini_string function.

had to code this function due to the lack of a php 5.3 on some hosting.

parse_ini_string_m:

- ignores commented lines that start with ";" or "#"

- ignores broken lines that do not have "="

- supports array values and array value keys

if(empty($str)) returnfalse;$lines=explode("\n",$str);$ret= Array();$inside_section=false;

foreach($linesas$line) {$line=trim($line);

if(!$line||$line[0] =="#"||$line[0] ==";") continue;

if($line[0] =="["&&$endIdx=strpos($line,"]")){$inside_section=substr($line,1,$endIdx-1);

continue;

}

if(!strpos($line,'=')) continue;$tmp=explode("=",$line,2);

if($inside_section) {$key=rtrim($tmp[0]);$value=ltrim($tmp[1]);

if(preg_match("/^\".*\"$/",$value) ||preg_match("/^'.*'$/",$value)) {$value=mb_substr($value,1,mb_strlen($value) -2);

}$t=preg_match("^\[(.*?)\]^",$key,$matches);

if(!empty($matches) && isset($matches[0])) {$arr_name=preg_replace('#\[(.*?)\]#is','',$key);

if(!isset($ret[$inside_section][$arr_name]) || !is_array($ret[$inside_section][$arr_name])) {$ret[$inside_section][$arr_name] = array();

}

if(isset($matches[1]) && !empty($matches[1])) {$ret[$inside_section][$arr_name][$matches[1]] =$value;

} else {$ret[$inside_section][$arr_name][] =$value;

}

} else {$ret[$inside_section][trim($tmp[0])] =$value;

}

} else {$ret[trim($tmp[0])] =ltrim($tmp[1]);

}

}

return$ret;

}?>

example usage:

$ini='

[simple]

val_one = "some value"

val_two = 567

[array]

val_arr[] = "arr_elem_one"

val_arr[] = "arr_elem_two"

val_arr[] = "arr_elem_three"

[array_keys]

val_arr_two[6] = "key_6"

val_arr_two[some_key] = "some_key_value"

';$arr=parse_ini_string_m($ini);?>

variable $arr output:

Array

(

[simple] => Array

(

[val_one] => some value

[val_two] => 567

)

[array] => Array

(

[val_arr] => Array

(

[0] => arr_elem_one

[1] => arr_elem_two

[2] => arr_elem_three

)

)

[array_keys] => Array

(

[val_arr_two] => Array

(

[6] => key_6

[some_key] => some_key_value

)

)

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值