Ведение всех значений дубликатов ключей при разборе файла .ini

У меня есть файл 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 возвращать массив вместо этого?

Я понимаю, что внутренности 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 )