是否可以使用变量作为数组前缀?我有一组格式为$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;
}
}
正如您所看到的,我尝试使用${$env}_settings[]
,但这给了我一个PHP错误:
意外'_settings'(T_STRING)
可能的?
答案 0 :(得分:3)
是的,有可能。你的循环应该如下所示:
foreach( $environments as $env )
{
if( $current_env == $env )
{
define('DEBUG', ${$env.'_settings'}['debug']);
define('CAKE', ${$env.'_settings'}['cake']);
define('DEATH', ${$env.'_settings'}['death']);
break;
}
}
注意:
=
而不是=>
。break
- 否则,你将尝试重新声明常量并导致PHP输出错误=
更改为==
。 =
是赋值运算符。您需要使用==
(松散比较)或===
(严格比较)。答案 1 :(得分:1)
为此目的使用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);
}
答案 2 :(得分:1)
为什么不制作一个二维阵列......
$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']);
}
(我只是输入了 - 可能有拼写错误!)
答案 3 :(得分:0)
应该是
$local_settings = array
(
'debug' => TRUE,
'cake' =>TRUE,
'death' => FALSE
);
在为值分配键时,使用 =>
运算符代替 =
运算符
答案 4 :(得分:0)
我将值更改为字符串仅用于测试。试试这个:
$env = 'local';
$local_settings = array
(
'debug' => 'TRUE',
'cake' => 'TRUE',
'death' => 'FALSE'
);
$setting_selector=$env.'_settings';
echo ${$setting_selector}['debug'];