如何在while循环的每次迭代中分配数组值?(附PHP代码示例)
解决while循环中分配数组值的问题
我来帮你搞定这个需求!核心思路是跟踪当前分配到哪个Team,然后根据每个数据库行的loopvalue数量从Team列表里取对应项,同时计算所属的day。
步骤1:生成完整的Team列表
你已经写了生成t1到t15的Team数组,我调整了小细节让代码更严谨:
$final_ttt = 15; // 用数字类型比字符串更合适 $items = []; for ($j = 1; $j <= $final_ttt; ++$j) { $TeamNo = "t$j"; $items[] = $TeamNo; }
步骤2:初始化跟踪变量
我们需要两个关键变量来控制分配逻辑:
$currentTeamIndex:记录当前分配到第几个Team(从0开始计数)$data1:存储最终的结果数组
$data1 = []; $currentTeamIndex = 0;
步骤3:修改while循环逻辑
在循环里,我们为每个name分配对应数量的Team,同时计算所属的day:
while($row = $qry->fetch()) { $name = $row['name']; $loopvalue = $row['loopvalue']; // 收集当前name对应的所有Team $assignedTeams = []; // 计算当前这批Team所属的day(每15个Team为一天) $day = floor($currentTeamIndex / $final_ttt) + 1; // 循环分配指定数量的Team for ($k = 0; $k < $loopvalue; $k++) { // 用取模运算实现Team列表的循环复用(超过15个自动回到t1) $teamIndex = $currentTeamIndex % $final_ttt; $assignedTeams[] = $items[$teamIndex]; $currentTeamIndex++; } // 把Team数组转成逗号分隔的字符串 $teamStr = implode(',', $assignedTeams); // 将结果存入$data1数组 $data1[] = [ "name" => $name, "value" => $loopvalue, "Team" => $teamStr, "day" => $day ]; }
验证输出效果
用你给出的示例数据测试:
- 第一个行:name=a,loopvalue=2 → 分配
t1,t2,对应day=1 - 第二个行:name=b,loopvalue=3 → 分配
t3,t4,t5,对应day=1 - 当分配到第16个Team时,day会自动切换为2,以此类推
如果打印print_r($data1),会得到符合你期望格式的结果结构:
Array ( [0] => Array ( [name] => a [value] => 2 [Team] => t1,t2 [day] => 1 ) [1] => Array ( [name] => b [value] => 3 [Team] => t3,t4,t5 [day] => 1 ) ... )
内容的提问来源于stack exchange,提问作者konda
相关产品推荐
相关产品推荐

