2011-02-02 14 views
0

私の質問はかなり基本的なようですが、私はそれを回避することはできません。多次元配列の2番目の値を別の配列に置き換えようとしますが、それは私のforeachループで緩んでいます。すべてが単なる例です。見逃しのような失敗はここで起こります。元はクラス内の関数です。ありがとう!多次元配列の配列値を置き換える - 基本Q

これは、設定の配列がどのように見えるかです:

$config_arr = array( 
    'foo_a' => array('foo_a_singular', 'foo_a_plural', array('assign_me_aa', 'assign_me_ab')); 
    'foo_b' => array('foo_b_singular', 'foo_b_plural', 'assign_me_b') 
); 

この処理が起こるか:

function process_foo($config_arr) { 
    foreach ($config_arr as $config_data) { 
    $replacement_data = array('bar_me', 'bar_her', 'bar_some'); 
    $config_data[1] = $replacement_data; 
    var_dump($config_data); 
    } 
    print_r($config_arr); 
} 

var_dumpは、私は/がデータを追加、置換ことを私に示しているが、print_rは私に語りました何も起こらない。

答えて

0

ポイントは、連想配列の数値インデックス$config_data[1]を使用しようとしました:'foo_b' => array('foo_b_singular', 'foo_b_plural', 'assign_me_b')、これはうまくいかないでしょう。 key()array_keys()のようなものを使う必要があります。

1

この回答は1分でブラシアップされますが、スコープはconfig_dataのローカルであるか、または読み書きしかできません。私はこれまでにこの問題を抱えていました。ループ内で実際のconfig_arrを使用する必要があります。これは、カウンタ変数を使用して行うことができます。誰かがこれを行うためのより良い/異なる方法を知っているかもしれません。

+0

'private $ names;パブリック関数__construct($ config_arr){$ this-> names = $ config_arr; } 'は私のクラスの始まりによく似ているので、そこに保存されています。私はそれから1つのfnを通って走ったときに、もう一度$ config_arrを書き直します。私も 'private $ counter;を試した。 (__construct :) $ this-> counter = count($ config_arr); 'これをループスルーします。それは楽しいです:違いはありません... – kaiser