0

可変変数を配列プレフィックスとして使用することは可能ですか? 形式の配列のセットがあり$x_settings、条件に一致するプレフィックスに応じて、1 つの値のみを出力したいと考えています。

これは、はるかに複雑なコードの非常に単純化されたバージョンです。

$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)

可能?

4

5 に答える 5

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 がエラーを出力する原因になります。
  • に変わり=ました===代入演算子です。==代わりに(緩い比較) または===(厳密な比較)を使用する必要があります。

デモ

于 2014-02-07T18:01:44.557 に答える
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);
}
于 2014-02-07T18:06:59.907 に答える