解析 .ini 文件时保留重复键的所有值
Maintain all values of duplicate keys when parsing .ini file
我有一个 php.ini
文件,其中包含以下行:
; ...settings
extension=pdo_mysql
extension=pdo_oci
; settings...
所以我这样做:
var_dump( parse_ini_file( '/path/to/php.ini' )[ 'extension' ] );
但我得到的只是 string(7) "pdo_oci"
所以看起来解析只是保持 extension
设置为的最终值。
有没有办法让 extension
键 return 变成一个数组?
我知道 PHP 的内部可能使用专用解析器来明确处理这种情况,以便正确加载扩展,但这并不能帮助我实现我的目标。
由于 ini 文件的键成为数组的键,因此值被覆盖。我想出了自己的功能。
代码:
function my_parse_ini($file){
$arr = array();
$handle = fopen($file, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$parsed = parse_ini_string($line);
if(empty($parsed)){ continue; }
$key = key($parsed);
if(isset($arr[$key])){
if(!is_array($arr[$key])){
$tmp = $arr[$key];
$arr[$key] = array($tmp);
}
$arr[$key][] = $parsed[$key];
}else{
$arr[$key] = $parsed[$key];
}
}
fclose($handle);
return $arr;
} else {
// error opening the file.
}
}
调用它传递要解析的文件,像这样:
$parsed = my_parse_ini('/path/to/php.ini');
结果: ($parsed
)
对于包含
的文件
; ...settings
extension=pdo_mysql
extension=pdo_oci
foo=test
bar=ok
foo=teste1
; settings...
这是输出:
Array
(
[extension] => Array
(
[0] => pdo_mysql
[1] => pdo_oci
)
[foo] => Array
(
[0] => test
[1] => teste1
)
[bar] => ok
)
我有一个 php.ini
文件,其中包含以下行:
; ...settings
extension=pdo_mysql
extension=pdo_oci
; settings...
所以我这样做:
var_dump( parse_ini_file( '/path/to/php.ini' )[ 'extension' ] );
但我得到的只是 string(7) "pdo_oci"
所以看起来解析只是保持 extension
设置为的最终值。
有没有办法让 extension
键 return 变成一个数组?
我知道 PHP 的内部可能使用专用解析器来明确处理这种情况,以便正确加载扩展,但这并不能帮助我实现我的目标。
由于 ini 文件的键成为数组的键,因此值被覆盖。我想出了自己的功能。
代码:
function my_parse_ini($file){
$arr = array();
$handle = fopen($file, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$parsed = parse_ini_string($line);
if(empty($parsed)){ continue; }
$key = key($parsed);
if(isset($arr[$key])){
if(!is_array($arr[$key])){
$tmp = $arr[$key];
$arr[$key] = array($tmp);
}
$arr[$key][] = $parsed[$key];
}else{
$arr[$key] = $parsed[$key];
}
}
fclose($handle);
return $arr;
} else {
// error opening the file.
}
}
调用它传递要解析的文件,像这样:
$parsed = my_parse_ini('/path/to/php.ini');
结果: ($parsed
)
对于包含
的文件; ...settings
extension=pdo_mysql
extension=pdo_oci
foo=test
bar=ok
foo=teste1
; settings...
这是输出:
Array
(
[extension] => Array
(
[0] => pdo_mysql
[1] => pdo_oci
)
[foo] => Array
(
[0] => test
[1] => teste1
)
[bar] => ok
)