我已经尝试过很多次将这个配置文件转换为多维数组,这意味着我必须读取config.txt文件,然后我必须转换为多维数组。我需要帮助或一些建议。
config.txt的:
id=www
session.timeout=120
session.server.0.host=127.0.0.1
session.server.0.port=1111
session.server.0.id=session1
session.server.1.host=127.0.0.1
session.server.1.port=1111
session.server.1.id=session2
image.width=640
image.height=480
image.watermark.small=wsmall.png
image.watermark.normal=wnormal.png
答案 0 :(得分:2)
这样的事情应该有效:
$config = array();
foreach( file( 'config.txt') as $line) {
list( $keys, $value) = explode( '=', $line);
$temp =& $config;
foreach( explode( '.', $keys) as $key)
{
$temp =& $temp[$key];
}
$temp = trim( $value);
}
一次阅读每一行后,您将$keys
中的所有密钥和$value
中的explode()
- =
的{{1}}。然后,使用$temp
作为$config
数组的“指针”,循环遍历所有$keys
,explode()
分别由.
提取{{1} ,形成多维数组。一旦所有键都用完了,我就将值分配给该条目,然后移到下一行。
你可以在the demo看到它很好用。对于您的输入,这将生成如下数组:
array(3) {
["id"]=>
string(3) "www"
["session"]=>
array(2) {
["timeout"]=>
string(3) "120"
["server"]=>
array(2) {
[0]=>
array(3) {
["host"]=>
string(9) "127.0.0.1"
["port"]=>
string(4) "1111"
["id"]=>
string(8) "session1"
}
[1]=>
array(3) {
["host"]=>
string(9) "127.0.0.1"
["port"]=>
string(4) "1111"
["id"]=>
string(8) "session2"
}
}
}
["image"]=>
array(3) {
["width"]=>
string(3) "640"
["height"]=>
string(3) "480"
["watermark"]=>
array(2) {
["small"]=>
string(10) "wsmall.png"
["normal"]=>
&string(11) "wnormal.png"
}
}
}
答案 1 :(得分:1)
function load_config_file($filename)
{
$config = array();
foreach(file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line)
{
if(!preg_match('/^(.+?)=(.*)$/', $line, $matches))
{
continue;
}
$indices = explode('.', $matches[1]);
$current = &$config;
foreach($indices as $index)
{
$current = &$current[$index];
}
$current = $matches[2];
}
return $config;
}
load_config_file('config.txt')
的结果:
Array ( [id] => www [session] => Array ( [timeout] => 120 [server] => Array ( [0] => Array ( [host] => 127.0.0.1 [port] => 1111 [id] => session1 ) [1] => Array ( [host] => 127.0.0.1 [port] => 1111 [id] => session2 ) ) ) [image] => Array ( [width] => 640 [height] => 480 [watermark] => Array ( [small] => wsmall.png [normal] => wnormal.png ) ) )
答案 2 :(得分:1)
Zend Framework有一个名为Zend_Config_Ini的类,它会将此结构的文件解析为对象或数组。
要使用它,您需要从Zend Framework库中获取3个文件:
获得这3个文件后,这里的代码演示了解析和访问该文件中的值:
require_once 'Zend/Config/Ini.php';
$ini = new Zend_Config_Ini('settings.ini');
$ini = $ini->toArray();
echo $ini['session']['server'][0]['host']; // 127.0.0.1
echo $ini['session']['server'][1]['id']; // session2
echo $ini['image']['width']; // 640
要从Zend Framework获取3个文件,请将它们放在一个名为Zend
的文件夹中,并附上您的PHP文件,并将Zend
所在的目录添加到include_path。< / p>