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
相关产品推荐
相关产品推荐

