【问题标题】:Foreach Nested LoopsForeach 嵌套循环
【发布时间】:2018-02-18 03:21:52
【问题描述】:

这是我的代码。我遇到的问题是我希望我的 PHP 代码中来自 HP 的数字到我的 HP HTML 代码中,并且与 Cylinders 相同。我已经弄清楚了其他的东西,但是当涉及到那部分时,我被卡住了

<?php 

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    $cars = array(
        array(
            "car"       =>  "Ferrari",
            "model"     =>  "Testarossa",
            "gearbox"   =>  "Manual 5 Shift",
            "designer"  =>  "Battista Pininfarina",
            "engine"    => 
        array(
            "HP"        => 390, 
            "Cylinders" => 12
            ),
        ),

    );

    ?>

    <?php foreach($cars as $cars_key => $car_val): ?>

        <ul>
            <div style="margin-bottom: 10px;">
                <li><b>Car:</b> <?php echo $car_val["car"]; ?></li>
                <li><b>Model:</b> <?php echo $car_val["model"]; ?></li>
                <li><b>Gearbox:</b> <?php echo $car_val["gearbox"]; ?></li>
                <li><b>Designer:</b> <?php echo $car_val["designer"]; ?></li>
                <li><b>Engine</b></li>
                    <ul>
                        <li><b>HP:</b></li>            
                        <li><b>Cylinders:</b></li>                                        
                    </ul>
            </div>
        </ul>
    <?php endforeach; ?>

【问题讨论】:

    标签: php arrays foreach nested-loops


    【解决方案1】:

    我有几个问题:

    1. 当您将值硬编码到脚本中时,您将失去关联数组的光彩/实用性,否则您只能从数组中调用这些值。

    2. 我不喜欢中间名单&lt;div&gt; 的样子。我想不出任何好的理由来打破你的无序列表流程。

    3. 我也不喜欢浮动子列表。它在逻辑上属于Engine,并且良好的标记将指示子列表存在于其父级内部。

    考虑到我的上述观点,这是我的建议......

    *一些注意事项:

    • 我不确定随着数组大小的增加,您希望如何布局多个列表。
    • 回声只是我个人的喜好。如果你愿意,你可以跳进跳出 php。
    • ucfirst() 允许您避免对密钥进行硬编码。
    • 我的 sn-p 将使您的任务干净、干燥、简洁。

    代码:(Demo)

    $cars = array(
                array(
                    "car"       =>  "Ferrari",
                    "model"     =>  "Testarossa",
                    "gearbox"   =>  "Manual 5 Shift",
                    "designer"  =>  "Battista Pininfarina",
                    "engine"    =>  array(
                                        "HP"        => 390, 
                                        "Cylinders" => 12
                                    )
                )
            );
    
    foreach($cars as $details){
        echo "<ul style=\"margin-bottom:10px;\">";
            foreach($details as $key=>$item){
                echo "<li><b>",ucfirst($key),":</b>";
                if(!is_array($item)){
                    echo " $item</li>";
                }else{
                        echo "<ul>";
                            foreach($item as $subkey=>$subval){
                                echo "<li><b>$subkey:</b> $subval</li>";
                            }
                        echo "</ul>";
                    echo "</li>";
                }
            }
        echo "</ul>";
    }
    

    源代码输出:

    <ul style="margin-bottom:10px;">
        <li><b>Car:</b> Ferrari</li>
        <li><b>Model:</b> Testarossa</li>
        <li><b>Gearbox:</b> Manual 5 Shift</li>
        <li><b>Designer:</b> Battista Pininfarina</li>
        <li><b>Engine:</b>
            <ul>
                <li><b>HP:</b> 390</li>
                <li><b>Cylinders:</b> 12</li>
            </ul>
        </li>
    </ul>
    

    渲染输出:(运行我的 sn-p@phptester.net 看到这个)

    【讨论】:

    • 感谢 mickmackusa,我同意你的看法,最好不要将值硬编码到脚本中。非常喜欢这个版本,感谢帮助
    【解决方案2】:

    从你的例子来看,在我看来列表是静态的并且由两个元素组成,那么你根本不需要使用forEach

    <?php foreach($cars as $cars_key => $car_val): ?>
        <ul>
            <div style="margin-bottom: 10px;">
                <li><b>Car:</b> <?php echo $car_val["car"]; ?></li>
                <li><b>Model:</b> <?php echo $car_val["model"]; ?></li>
                <li><b>Gearbox:</b> <?php echo $car_val["gearbox"]; ?></li>
                <li><b>Designer:</b> <?php echo $car_val["designer"]; ?>
                </li>
                <li><b>Engine</b></li>
                    <ul>
                        <li><b>HP:</b><?php echo $car_val["engine"]["HP"]; ?></li>            
                        <li><b>Cylinders:</b><?php echo $car_val["engine"]["Cylinders"]; ?></li>                                        
                    </ul>
            </div>
        </ul>
    <?php endforeach; ?>
    

    如果您确实需要使用嵌套的forEach,您可以这样做:

    foreach($cars as $cars_key => $car_val):
      if($cars_key == "engine")
          foreach($car_val["engine"] as $engine_key => $engine_val):
            echo $engine_key.$engine_val;
          endforeach;
    endforeach;
    

    【讨论】:

    • 我打算添加更多汽车和关于它们的不同信息,这就是为什么我希望它是动态的,另外我正在使用 foreach 练习各种不同类型的循环。尽可能多地做嵌套循环
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2012-05-28
    • 2019-07-13
    • 2016-05-28
    • 2020-03-17
    相关资源
    最近更新 更多