1

我不知道正确地形成这个问题的标题,因为我什至不知道我正在尝试做的事情是否有名字。

假设我有一个外部文件(例如,称为 settings.txt),其中包含以下内容:

template:'xaddict';
editor:'true';
wysiwyg:'false';

这些是简单的名称:值对。我想让 php 以这样的方式处理这个文件,最终得到具有以下值的 php 变量:

$template = 'xaddict';
$editor = 'true';
$wysiwyg = 'false';

我不知道我会有多少这些变量。

我应该怎么做?

文件中的数据是简单的名称:值对。没有嵌套,没有复杂的数据。所有的名字都需要转换为$name,所有的值都需要转换为'value',不管它是否真的是一个字符串。

4

4 回答 4

6
$settings = json_decode(file_get_contents($filename));

假设您的文件是有效的 JSON 格式。如果没有,您可以按摩它,否则您将不得不使用不同的方法。

于 2009-08-18T13:53:50.123 回答
1

如果你使用 JSON,你可以使用类似的东西:

extract(json_decode(file_get_contents('settings.json')));

使用 extract 可能很危险,所以我建议将这些设置存储在一个数组中:

$settings = json_decode(file_get_contents('settings.json'));
于 2009-08-18T13:55:36.300 回答
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];
}
于 2009-08-18T14:11:14.953 回答
0

您应该使用 file() 函数将文件读入一个数组,然后您应该在其上循环:对于每一行(file() 函数将返回一个数组,每个项目一行),检查该行是否为空,然后对“:”字符进行explode(),修剪碎片,并将它们放入一个数组中。你最终会赢得这样一个数组:

[template] = xaddict
[editor] = true

那么您可以使用此信息。

不要自动其转换为局部变量:这是一种引入安全风险的好方法,并且可能会导致非常晦涩的错误(本地变量被此解析引入的变量所掩盖)。

于 2009-08-18T13:58:50.430 回答