我不知道是否正确地形成了这个问题的标题,因为我甚至不知道我想要做的是否有一个名字。
假设我有一个外部文件(例如,名为settings.txt),其中包含以下内容:
template:'xaddict';
editor:'true';
wysiwyg:'false';
这些是简单的名称:值对。 我希望php以这样的方式处理这个文件,我最终得到了具有以下值的php变量:
$template = 'xaddict';
$editor = 'true';
$wysiwyg = 'false';
我不知道我会有多少这些变量。
我该怎么做呢?
文件中的数据是简单的名称:值对。没有嵌套,没有复杂的数据。所有名称都需要转换为$ name,所有值都需要转换为'value',不管它是否真的是一个字符串。
答案 0 :(得分:6)
$settings = json_decode(file_get_contents($filename));
假设您的文件是有效的JSON格式。如果没有,你可以按摩它,或者你必须使用不同的方法。
答案 1 :(得分:1)
如果您使用JSON,则可以使用以下内容:
extract(json_decode(file_get_contents('settings.json')));
使用提取可能很危险,因此我建议将这些设置存储在数组中:
$settings = json_decode(file_get_contents('settings.json'));
答案 2 :(得分:1)
你想在“editor:'true'”中将'true'解释为字符串还是布尔值?如果有时是字符串,有时是布尔值,你怎么知道哪个?
如果您有“number ='9'”,您是否希望'9'被解释为字符串或整数? '09'会是十进制数还是八进制数? “number ='3.14'”怎么样:字符串还是浮点数?如果有时一个,有时另一个,你怎么知道哪个?
如果你在某个值中有“'”(单引号),它会被转义吗?如果是这样,怎么样?
是否有阵列数据的期望?
等
编辑:这是使用示例输入检索示例数据的最简单方法,imo:
$file = 'test.csv';
$fp = fopen($file, 'r');
while ($line = fgetcsv($fp, 1024, ':')) {
$$line[0] = $line[1];
}
答案 3 :(得分:0)
你应该用file()函数读取你的文件到一个数组,然后你应该循环它:对于每一行(file()函数将返回一个数组,每个项目一行),检查是否该行不是空白,然后在“:”字符上爆炸(),修剪碎片,并将它们放入数组中。 你最终会赢得这样的数组:
[template] = xaddict
[editor] = true
然后您可以使用此信息。
不会自动将其转换为本地变量:这是一种引入安全风险的好方法,也可能是非常模糊的错误(本解析所引入的局部变量模糊不清)。