提问人:kmgdev 提问时间:2/8/2014 最后编辑:kmgdev 更新时间:2/8/2014 访问量:79
使用变量变量作为数组前缀
Use Variable Variable as Array Prefix
问:
是否可以使用变量变量作为数组前缀?我有一组格式为 的数组,我想根据与条件匹配的前缀只输出一个数组的值。$x_settings
这是更复杂代码的极其精简的版本,因此感谢您的宽容:
$current_env = 'local';
$local_settings = array
(
'debug' => TRUE,
'cake' => TRUE,
'death' => FALSE
);
$environments = array
(
'local',
'dev',
'prod'
);
foreach( $environments as $env )
{
if( $current_env == $env )
{
define('DEBUG', ${$env}_settings['debug']);
define('CAKE', ${$env}_settings['cake']);
define('DEATH', ${$env}_settings['death']);
break;
}
}
如您所见,我尝试使用,但这给了我一个PHP错误:${$env}_settings[]
意想不到的“_settings”(T_STRING)
可能?
答:
0赞
Shankar Narayana Damodaran
2/8/2014
#1
它应该是
$local_settings = array
(
'debug' => TRUE,
'cake' =>TRUE,
'death' => FALSE
);
在为值分配键时,请使用 =>
运算符而不是 =
运算符
3赞
Amal Murali
2/8/2014
#2
是的,这是可能的。您的循环应如下所示:
foreach( $environments as $env )
{
if( $current_env == $env )
{
define('DEBUG', ${$env.'_settings'}['debug']);
define('CAKE', ${$env.'_settings'}['cake']);
define('DEATH', ${$env.'_settings'}['death']);
break;
}
}
笔记:
- 我已经修复了您的数组声明中的拼写错误。您使用的只是而不是 .
=
=>
- 我在你的循环中添加了一个 - 否则,您将尝试重新声明常量,这将导致 PHP 输出错误
break
- 我已更改为 . 是赋值运算符。您需要改用(松散比较)或(严格比较)。
=
==
=
==
===
1赞
u_mulder
2/8/2014
#3
为此,请使用 2D 数组:
$current_env = 'local';
$environment_settings = array(
'local' => array('debug' = TRUE, 'cake' = TRUE, 'death' = FALSE),
'dev' => array('debug' = TRUE, 'cake' = FALSE, 'death' = FALSE),
'prod' => array('debug' = TRUE, 'cake' = TRUE, 'death' = FALSE)
);
if (isset($environment_settings[$current_env])) {
foreach ($environment_settings[$current_env] as $name => $val)
define(strtoupper($name), $value);
}
1赞
TonyWilk
2/8/2014
#4
为什么不直接做一个二维数组呢?
$settings=array(
"local" => array(
'cake'=>TRUE,
'death'=>FALSE
),
"dev" =>array(...etc ...),
"prod"=>array(...etc ...)
);
然后:
if( $current_env = $env )
{
define('DEBUG', $settings[$env]['debug']);
define('CAKE', $settings[$env]['cake']);
define('DEATH', $settings[$env]['death']);
}
(我刚刚输入了这个 - 可能有错别字!
0赞
TecBrat
2/8/2014
#5
我将值更改为字符串只是为了测试。试试这个:
$env = 'local';
$local_settings = array
(
'debug' => 'TRUE',
'cake' => 'TRUE',
'death' => 'FALSE'
);
$setting_selector=$env.'_settings';
echo ${$setting_selector}['debug'];
上一个:PHP 和带数组的变量变量
评论
$current_env = $env
始终为真,因为这意味着“设置”。你是说条件运算符还是?$current_env to the value of $env
==
===