2017-04-15 107 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线在你的代码。