我正在编写配置编辑器。我正在逐行阅读fopen和fgets文件。 我想从字符串中获取数组键和值。我不熟悉正则表达式这就是为什么我问。从PHP源获取数组键和值
示例配置文件:
$conf['something'] = 'value';
$conf['other_thing']['another_key'] = 3000;
我可以通过$的conf阵列不循环,因为它是在系统中的超对象,并拥有许多额外的DATAS,甚至inited类...
我正在编写配置编辑器。我正在逐行阅读fopen和fgets文件。 我想从字符串中获取数组键和值。我不熟悉正则表达式这就是为什么我问。从PHP源获取数组键和值
示例配置文件:
$conf['something'] = 'value';
$conf['other_thing']['another_key'] = 3000;
我可以通过$的conf阵列不循环,因为它是在系统中的超对象,并拥有许多额外的DATAS,甚至inited类...
\$conf\['(.*?)']\s+=\s+'(.*?)';
这里是你的模式。键位于组1中,值位于组2中。
$
,[
和]
是特殊字符,因此您应该将其转义。 \s+
表示空白字符1次或更多次。
这将是有效的没有空白,所以我会使用'\ s *'。该数组也可以使用“key”而不是“key”有效,因此您需要对此进行解释。价值也一样。正如@ t1gor –
所提到的那样,读取这个数组好像更好一些。错误:发现无结尾分隔符'$' – wintercounter
ow ..在模式末尾添加$(无反斜杠) – shift66
这里是你的正则表达式:
\$conf(\[('.*')\])+\s?=\s?(.*);
的第一场比赛是你的钥匙,最后一个你的价值
我得到这个错误:找不到结尾分隔符'$' – wintercounter
这可能是因为第一个“\”在PHP中转义字符串。 –
这个例子确实对数组的格式做了一些假设。它必须总是有1或0个空格,所以不应该添加TAB或多个空格。这个键总是由一个''''指定的,而不是'''',它也会捕获一个值的引号,所以很可能需要修剪。总而言之,我会考虑使用@ t1gor发布的选项或@ WebnetMobile.com –
我会做水木清华这样的:
// 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);
如果您需要对该$ config变量进行范围限制,以便它不会感染您的实际配置变量,那么您可以将这个函数包装在include中。 –
我不知道我在追随。请加一个例子 – t1gor
'类configEditor(){' '私人$ CONF;' '函数load_config(){'' 包括 'config_file.php';'' $这 - > CONF = $配置;' –
虽然没有直接回答你的问题,但正如你写的“我正在编写配置编辑器。”然后我假设你也写下这个配置文件。因此,假如你的编辑器保持在配置阵列$conf
而它的作品,我只是放弃它作为JSON,而不是你的PHP代码:
file_put_contents('config.json', json_encode($conf));
,然后在需要
$conf = json_decode(file_get_contents('config.json'));
时,由于该读回在PHP数组可以直接循环通过它,并获得所需的键值对 其他你能,你可以使用PHP的功能array_keys从$ CONF阵列获取所有键和array_values用于获取数组值
否则
如果你想创建一个配置编辑器尝试使用INI文件PHP具有用于创建和使用配置文件了很好的支持看到这个函数parse_ini_file这是一个用于创建配置文件,如果你有太多的键值对的标准方式
这不是一个现在的解决方案,但thx。 – wintercounter
因为你有一个php数组为什么你要使用fopen再次阅读它只包含文件并使用$ conf变量 –
为什么你让自己的生活比它可能更难?以更可解析的格式编写配置文件。 –
为什么要增加额外解析让应用程序变慢?在我的情况下,只有在管理区域打开配置编辑器时才需要解析。 – wintercounter