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

如何实现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;

关键说明

  1. 循环顺序交换:原来的计划名称 → 等级循环变成等级 → 计划名称,这样同一等级的所有计划卡片会连续生成,比如先输出所有Bronze等级的Alpha、Omega、Gamma卡片,再输出Silver等级的所有卡片,以此类推,完全符合你期望的输出结构。
  2. 可选的行容器:我添加了<div class="row">和闭合标签,这样每个等级组会在Bootstrap网格里单独占一行,视觉上完全分开(如果不需要强制换行,可以去掉这两行代码)。
  3. SQL查询无需修改:因为查询条件还是匹配当前计划名称和等级,只是循环顺序变了,所以SQL语句可以直接沿用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:24