Foreach嵌套循环

时间:2018-02-18 03:21:53

标签: php arrays foreach nested-loops

所以这是我的代码。我遇到的问题是我希望我的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; ?>

How it looks now

2 个答案:

答案 0 :(得分:0)

从你的例子来看,在我看来,列表是静态的,由两个元素组成,然后你根本不需要使用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;

答案 1 :(得分:0)

我有一些顾虑:

  1. 当您将值硬编码到脚本中时,您将失去关联数组的亮度/效用,否则您只能从阵列中调用它。

  2. 我不喜欢中间列表<div>的外观。我无法想出用它打破你的无序列表流程的任何好理由。

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

  4. 以下是我建议考虑上述观点......

    *一些注释:

    • 我不确定在数组大小增加时如何布局多个列表。
    • 回声只是我个人的偏好。如果你愿意,你可以反弹进出php。
    • ucfirst()可让您避免对密钥进行硬编码。
    • 我的代码片段会让您的任务干净,干爽,简洁。

    代码:(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>
    

    渲染输出:(运行我的代码片段@ phptester.net查看)

    enter image description here