2012-11-23 84 views
0

我正在编写配置编辑器。我正在逐行阅读fopen和fgets文件。 我想从字符串中获取数组键和值。我不熟悉正则表达式这就是为什么我问。从PHP源获取数组键和值

示例配置文件:

$conf['something'] = 'value'; 
$conf['other_thing']['another_key'] = 3000; 

我可以通过$的conf阵列不循环,因为它是在系统中的超对象,并拥有许多额外的DATAS,甚至inited类...

+2

因为你有一个php数组为什么你要使用fopen再次阅读它只包含文件并使用$ conf变量 –

+0

为什么你让自己的生活比它可能更难?以更可解析的格式编写配置文件。 –

+0

为什么要增加额外解析让应用程序变慢?在我的情况下,只有在管理区域打开配置编辑器时才需要解析。 – wintercounter

回答

0

\$conf\['(.*?)']\s+=\s+'(.*?)';这里是你的模式。键位于组1中,值位于组2中。

$[]是特殊字符,因此您应该将其转义。 \s+表示空白字符1次或更多次。

+0

这将是有效的没有空白,所以我会使用'\ s *'。该数组也可以使用“key”而不是“key”有效,因此您需要对此进行解释。价值也一样。正如@ t1gor –

+0

所提到的那样,读取这个数组好像更好一些。错误:发现无结尾分隔符'$' – wintercounter

+0

ow ..在模式末尾添加$(无反斜杠) – shift66

0

这里是你的正则表达式:

\$conf(\[('.*')\])+\s?=\s?(.*); 

的第一场比赛是你的钥匙,最后一个你的价值

+0

我得到这个错误:找不到结尾分隔符'$' – wintercounter

+0

这可能是因为第一个“\”在PHP中转义字符串。 –

+0

这个例子确实对数组的格式做了一些假设。它必须总是有1或0个空格,所以不应该添加TAB或多个空格。这个键总是由一个''''指定的,而不是'''',它也会捕获一个值的引号,所以很可能需要修剪。总而言之,我会考虑使用@ t1gor发布的选项或@ WebnetMobile.com –

2

我会做水木清华这样的:

// get config file as a variable 
require_once('config_file.php'); 

// get keys 
$keys = array_keys($conf); 

// get config file as a variable 
$values = array_values($conf); 
+0

如果您需要对该$ config变量进行范围限制,以便它不会感染您的实际配置变量,那么您可以将这个函数包装在include中。 –

+0

我不知道我在追随。请加一个例子 – t1gor

+0

'类configEditor(){' '私人$ CONF;' '函数load_config(){'' 包括 'config_file.php';'' $这 - > CONF = $配置;' –

1

虽然没有直接回答你的问题,但正如你写的“我正在编写配置编辑器。”然后我假设你也写下这个配置文件。因此,假如你的编辑器保持在配置阵列$conf而它的作品,我只是放弃它作为JSON,而不是你的PHP代码:

file_put_contents('config.json', json_encode($conf)); 

,然后在需要

$conf = json_decode(file_get_contents('config.json')); 
0

时,由于该读回在PHP数组可以直接循环通过它,并获得所需的键值对 其他你能,你可以使用PHP的功能array_keys从$ CONF阵列获取所有键和array_values用于获取数组值

否则

如果你想创建一个配置编辑器尝试使用INI文件PHP

具有用于创建和使用配置文件了很好的支持看到这个函数parse_ini_file这是一个用于创建配置文件,如果你有太多的键值对的标准方式

+0

这不是一个现在的解决方案,但thx。 – wintercounter