在编写代码之前,我确保程序包含(_once(所有包含这些具有不同值的变量的文件。代码:
$mainFile = file_get_content('file.inc');
preg_match_all('/$[A-Za-z0-9-_]+/', $mainFile, $vars);
echo '<table>';
foreach ($vars[0] as $var) {
echo '<tr><td>';
//print_r($var);
echo "${$var}";
echo '</tr></td>';
}
echo '</table>';
在这种情况下,我有输出错误--注意:未定义的变量:"$password"…--。如果我更改
echo "${$var}";
至
echo "$var";
其输出为"$password"。但我想看看这个变量($password(的值是什么:"密码"。我有194个变量,其中包含许多文件中的值。
$
包含在正则表达式的密码名称中,因此您查找的是名为$password
的变量,而不是您所期望的password
。
区别可能很难看出——通常$password
指的是一个名为password
的变量——这正是你所期望的。在您的示例中,您希望结果是${"password"}
,但您也包含了正则表达式中的$
,有效地试图查找一个名为$password
的变量,其中存在美元符号(而不是您所期望的名为password
的变量(。
您可以通过添加捕获子组来修改正则表达式以跳过$
:
preg_match_all('/$([A-Za-z0-9-_]+)/', $mainFile, $vars);
然后改为使用CCD_ 11。
另一个选项是使用ltrim
删除$
前缀:
$var = ltrim($var, '$');
在您的foreach
中。