2017-04-15 112 views
0

所以我試圖在一個假的RPG中爲stat增長製作一個數組。它看起來像這樣。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

難道你不想'滾(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:在這種情況下,您應該接受(也可能贊成)這個答案。 – domsson

0

使用參考

只是用foreach ($growths as $stat_name => &$info)更換conrresponding線在你的代碼。