从php中的其他变量动态地组合一个变量


dynamically put together a variable from other variables in php

我想知道你是否可以从另一个变量构造一个PHP变量。

我想基于另一个变量的输出构建一个动态变量。

$cf = new RecursiveDirectoryIterator(dirname(__DIR__) . DS . "configuration");
foreach (new RecursiveIteratorIterator($cf) as $filename => $file) {
    if ($cf->getFilename() != "." && $cf->getFilename() != "..") {
        $ex = explode(".", $filename);
        $_.$ex[0] = parse_ini_file($filename, true);
    }
}

在上面的代码中,我想查看我的配置文件夹,并输出如下所示:

假设我们在配置文件夹

中有db.ini和theme.ini

所以输出应该是

$_db = parse_ini_file("db.ini", true);
$_theme = parse_ini_file("theme.ini", true);

我想也许把变量连接在一起我可以创建一个新的变量;-)

这个场景是,我想转储尽可能多的。ini文件到我的配置文件夹中,并让我的脚本动态地为我制作$_变量,并为该文件加载parse_ini_file函数。

还是我疯了?

动态变量

你想做的是可能的,他们更被称为可变变量:

http://php.net/manual/en/language.variables.variable.php

例如

$sql = "my query";
$variable = "sql";
echo ${$variable};

my query

在你的例子中,把它改成

$_{$ex[0]} = parse_ini_file($filename, true);

更好的方法

这样做的固有问题是,要跟踪你的ini文件以及它们存储在什么变量中要困难得多。一个更简洁的方法是使用关联数组。

http://au.php.net/manual/en/function.array.php

所以你的代码应该是这样的:
$name = pathinfo($filename, PATHINFO_FILENAME); //mildly more accurate then explode
$ini[$name] = parse_ini_file($filename, true);

然后在您查看之后,只需print_r $ini就可以看到结果

print_r($ini);

Try

$name = '_' . $ex[0];
$$name = parse_ini_file($filename, true);

你可以这样做:

// Inside the loop.
$ex = explode(".", $filename);
$variable = '_' . $ex[0];
$$variable = parse_ini_file($filename, true);

这将做你想要的。但是,请注意,如果$ex[0]不是语法上有效的PHP变量名(如"foo.bar"),则该变量将不可访问,除非通过动态变量机制($varname = "foo.bar"; $value = $$varname;)。

另外,请确保您信任正在读取的INI文件,因为这有可能破坏您自己的变量并用其他数据覆盖它们。