You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组循环问题:生成等比例重复元素的晶体ID数组

解决PHP生成均等重复彩色晶体数组的问题

嘿,我来帮你搞定这个问题~先看看你当前代码里的两个核心问题:

  • 每次循环都直接给$array赋值新的array_fill结果,这会覆盖掉之前已经生成的元素,而不是把新元素追加进去
  • 循环体里额外写了$i++,导致循环的步长变成了2,相当于跳过了一半的颜色元素(比如第一次i=0,执行后i变成1,下一次循环直接到i=2,就漏掉了i=1对应的颜色)

下面给你两种简单可行的解决方法:

方法一:合并小数组生成结果

遍历每个彩色晶体,用array_fill生成对应次数的元素数组,再用array_merge把这些小数组合并到最终数组里:

// 假设你已有的变量
$crystals_array = [2,3,4,5,6];
$amount_crystals_per_color_stack = 2;

$color_crystals_stack = [];
foreach ($crystals_array as $crystal_id) {
    // 生成当前颜色重复指定次数的数组,合并到结果中
    $color_crystals_stack = array_merge($color_crystals_stack, array_fill(0, $amount_crystals_per_color_stack, $crystal_id));
}

print_r($color_crystals_stack);
// 输出结果:Array ( [0] => 2 [1] => 2 [2] => 3 [3] => 3 [4] => 4 [5] => 4 [6] => 5 [7] => 5 [8] => 6 [9] => 6 )

方法二:嵌套循环逐个追加元素

如果你不想用array_merge,也可以用两层循环:外层遍历每个颜色,内层循环指定次数,把每个颜色ID逐个添加到结果数组:

$crystals_array = [2,3,4,5,6];
$amount_crystals_per_color_stack = 2;

$color_crystals_stack = [];
foreach ($crystals_array as $crystal_id) {
    for ($j = 0; $j < $amount_crystals_per_color_stack; $j++) {
        $color_crystals_stack[] = $crystal_id;
    }
}

print_r($color_crystals_stack);
// 同样会得到你需要的目标数组

要是你还是想用原来的for循环写法,记得去掉循环体里额外的$i++,并且改成追加元素的方式,比如:

$crystals_array = [2,3,4,5,6];
$amount_crystals_per_color_stack = 2;
$amount_crystals_color = count($crystals_array);

$color_crystals_stack = [];
for($i = 0; $i < $amount_crystals_color; $i++) {
    // 生成当前颜色的重复数组并追加到结果
    $color_crystals_stack = array_merge($color_crystals_stack, array_fill(0, $amount_crystals_per_color_stack, $crystals_array[$i]));
}

这样修改后就能正常生成你想要的均等重复数组啦~

内容的提问来源于stack exchange,提问作者Okkibro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:40:29