2017-12-14 4 views
0

キープリセットPHPで多次元配列を初期化する方法:私は定数として定義されている

define('CONFIG_CODES', 'v1,v2,v3'); 

が、私は配列としての私の定数で定義された設定コードを使用して多次元配列を初期化したいがキー。私はarray_fill_keys()と様々な他のメソッドを試してみましたが、配列を初期化することができません。私が初期化したい理由は、私のPHPスクリプトの結果でUndefined index: v2Undefined offset: 0を避けることです。ここで

私は初期化が見えるようにしたいものです。

Array 
(
    [v1] => Array 
     (
      [0] => 
      [1] => 
     ) 

    [v2] => Array 
     (
      [0] => 
      [1] => 
     ) 

    [v3] => Array 
     (
      [0] => 
      [1] => 
     ) 

) 

私の試み:

$serviceTimes = array_fill_keys(array(CONFIG_CODES), '');

+0

あなたは以下のように構造化して配列として 'CONFIG_CODES'を定義できますか? – Ice76

+0

さて、PHPでプログラム的にやってみたいと思っていました。私はすでにconstodeを展開しており、個々のキーを認識するための 'foreach()'を持っています。私はちょうど各設定コードを取って@ Ice76を初期化するための配列キーとして設定する方法を見つけることができません –

+0

あなたはキーを初期化しようとしていますか? @OP – Ice76

答えて

2

あなたの分解結果を通じて空$initialized配列、その後、ループを作成します。分解された値を連想キーとして使用します。

define('CONFIG_CODES', 'v1,v2,v3'); 
$initialized = array(); 
foreach(explode(',', CONFIG_CODES) as $val){ 
    $initialized[$val] = array(
     'val1', 
     'val2' 
    ); 
} 
+0

私はそれを試したことがありますが、まだインデックスとオフセットについてPHPの警告を受けていると確信していますが、もう一度試してみます。ありがとう@commanderZiltoid –

+0

上記の例は、私のマシン上で正しく出力します。エラーメッセージが表示された場合は、それが何であるか教えてください。 – commanderZiltoid

+0

これは働いた。私は最初の '$ initialized = array();'を無視したと思います。私はそれが私の試みの1つの間にそれを持っていることを思い出さなかったのでそれを知る。助けてくれてありがとう! –

1

これはあなたが探しているようなものですか?

define('CONFIG_ARRAY', 'v1, v2, v3'); 
define('VALUES', 2); 

function makeArray() 
{ 
    $array = array(); 
    $versions = explode(',', CONFIG_ARRAY); 
    foreach ($versions as $version) 
    { 
     $array[$version] = array(); 
     for($i = 0; $i < VALUES; $i++) 
     { 
      $array[$version][$i] = ''; 
     } 
    } 
    return $array; 
} 

これはジェネレータ関数ですが、関数からコードを削除して配列を作成することができます。

+0

ありがとう@ Ice76。これは動作するかもしれませんが、私はテストし、他の答えを使用しました。よりコンパクト(軽量)です。 –

関連する問題