如何实现PHP数组分组换行输出,使不同计划组单独成行?
解决方法:调整嵌套循环的顺序
问题的核心在于你当前的循环顺序是先遍历计划名称,再遍历每个计划下的等级,这导致同一个计划的所有等级卡片会连续输出。要实现同一等级的所有计划卡片放在一起(并在新行显示),只需要交换嵌套循环的顺序,把等级循环放在外层,计划名称循环放在内层即可。
修改后的完整代码
// arrays of plannames $planname_num = array(1=>"Alpha","Omega","Gamma"); // arrays of planlevels $planlevels_num = array(1=>"Bronze","Silver","Gold"); /* * * Get The Length of Plan Name Array * * */ $planname_array_length = count($planname_num); /* * * Get The Length of Plan Level Array * * */ $planlevel_array_length = count($planlevels_num); $pnArrayLength = $planname_array_length; $plArrayLength = $planlevel_array_length; // 关键修改:把等级循环放在外层,计划名称循环放在内层 for ($pl=1; $pl <= $plArrayLength; $pl++) { // 可选:如果需要每个等级组在新的Bootstrap行显示,添加row容器 $resultplanarray .= '<div class="row">'; for ($pn=1; $pn <= $pnArrayLength; $pn++) { // Create pricing for each plan from db $getplansql = "SELECT SUM(`planPrice`) AS planPrice,planDescription FROM `plans` WHERE planName = '$planname_num[$pn]' AND planLevel = '$planlevels_num[$pl]'"; $resultplans = $conn->query($getplansql); while($plan = mysqli_fetch_assoc($resultplans)) { $i++; // calculate sales price $finalpricing = ($plan['planPrice'] * 0.7) + ($plan['planPrice']); // create plan card $resultplanarray.= ' <div class="col-lg-2"> <div class="panel price panel-red"> <div class="panel-heading text-center"> <h3>'.$planname_num[$pn].'</h3> <h3>'.$planlevels_num[$pl].'</h3> </div> <div class="panel-body text-center"> <p class="lead panel-body-pricing" style=""><strong>$'.round($finalpricing).'/month</strong></p> </div> <ul class="list-group list-group-flush text-center"> <li class="list-group-item"><i class="icon-ok text-danger"></i> '.$plan['planDescription'].' </li> </ul> <div class="panel-footer"> <a class="btn btn-lg btn-block btn-danger" href="#">BUY</a> </div> </div> </div>'; } } // 可选:闭合row容器 $resultplanarray .= '</div>'; } // print result outside of while loop echo $resultplanarray;
关键说明
- 循环顺序交换:原来的
计划名称 → 等级循环变成等级 → 计划名称,这样同一等级的所有计划卡片会连续生成,比如先输出所有Bronze等级的Alpha、Omega、Gamma卡片,再输出Silver等级的所有卡片,以此类推,完全符合你期望的输出结构。 - 可选的行容器:我添加了
<div class="row">和闭合标签,这样每个等级组会在Bootstrap网格里单独占一行,视觉上完全分开(如果不需要强制换行,可以去掉这两行代码)。 - SQL查询无需修改:因为查询条件还是匹配当前计划名称和等级,只是循环顺序变了,所以SQL语句可以直接沿用。
内容的提问来源于stack exchange,提问作者user45678
相关产品推荐
相关产品推荐

