0

私は偽のRPGで統計の成長のための配列を作ろうとしています。それはこのように見えます。php;ループ内の多次元配列の値に追加する

// base array 
// $base: starting base stats 
// $growth: growth rate per rng 
$growths = array(
    'HP' => array (70 => 20), 
    'STR' => array (50 => 7), 
    'MAG' => array (35 => 2), 
    'SKL' => array (45 => 6), 
    'SPD' => array (50 => 8), 
    'LCK' => array (55 => 5), 
    'DEF' => array (45 => 6), 
    'RES' => array (15 => 4), 
);  

//rng calculator 
for ($x = 0; $x <= 20; $x++) { 
    foreach ($growths as $stat_name => $info) { 
     $roll = rand(0,100); 
     foreach ($info as $growth => $base) { 
      if ($roll <= $growth) { 
       $info[$growth] = ++$base; 
       print "(UP!) "; 
      } 
      echo "$stat_name: $base<br/ >"; 
     } 
    } 
} 

私の唯一の問題は、rng calculator後に新しい$base値が元の配列に格納することを拒否していることです。間違ったことをやっているのですか、あるいは配列を一から再構築して何か他のものを試す必要がありますか?どんな助けもありがとう!

+0

あなたは 'roll(1,100)'をしたくありませんか? –

+0

わかりません - roll()とrand()の違いは何ですか? – EM6

+0

申し訳ありませんが、私は 'rand(1,100)'を意味しました。これは私にとってペンとペーパーのRPGのように見えますが、私はそれが通常ゼロにはならないパーセンタイルのダイスロールだと思っています。 –

答えて

0

最初のforeachループでは、$growthsのキーを$stat_nameに、値を$infoに割り当てます。これらは一時変数です。それらを変更すると、元の配列は影響を受けません。

// This won't work because $info is temporary. 
$info[$growth] = ++$base; 

代わりに、単純に元の配列を参照してください。

// Do this instead. 
$growths[$stat_name][$growth] = ++$base; 
+0

それは働いた!ありがとうございました! – EM6

+0

@ EM6:この場合、おそらくこの回答を受け入れるべきです(おそらくupvote)。 – domsson

0

用参照

ちょうどあなたのコード内でconrresponding行を置き換えるためにforeach ($growths as $stat_name => &$info)を使用しています。