【问题标题】:php; Adding to the value of a multidimensional array in a loopphp;在循环中添加到多维数组的值
【发布时间】:2017-09-11 14:36:23
【问题描述】:

所以我正在尝试为假 rpg 中的统计增长创建一个数组。看起来像这样。

// 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 值拒绝存储在原始数组中。我做错了什么,还是我只需要从头开始重建阵列并尝试其他方法?任何帮助将不胜感激!

【问题讨论】:

  • 你不想roll(1, 100)吗?
  • 不确定——roll() 和 rand() 有什么区别?
  • 抱歉,是的,我的意思是rand(1, 100)。对我来说,这看起来像是一个纸笔角色扮演游戏,我认为这是一个百分位骰子,通常不可能为零。

标签: php arrays multidimensional-array foreach associative-array


【解决方案1】:

在您的第一个 foreach 循环中,您将 $growths 的键分配给 $stat_name,将值分配给 $info。这些是临时变量。如果更改它们,则原始数组不受影响。

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

相反,只需引用原始数组:

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

【讨论】:

  • @EM6:在这种情况下,您可能应该接受(并可能赞成)这个答案。
【解决方案2】:

使用参考

只需使用foreach ($growths as $stat_name =&gt; &amp;$info) 替换代码中的相应行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-09
    • 2011-10-17
    • 2011-03-07
    • 2011-02-10
    • 1970-01-01
    • 2013-06-25
    • 2019-07-17
    • 2012-05-13
    相关资源
    最近更新 更多