如何在数组的foreach循环中打开和关闭div标签?

时间:2015-08-05 14:00:08

标签: php arrays foreach

下面是我的示例数组。

$myArray = [
   'A', 
   'B', 
   'new-div', 
   'C', 
   'D', 
   'E', 
   'new-div', 
   'F', 
   'new-div', 
   'G', 
   'H', 
   'I', 
   'J', 
   'new-div', 
   'K',
];

以下是我的foreach循环。

foreach($myArray as $item) {
    echo '<div>' . $item . '</div>';
}

您可能知道上面的foreach循环的结果是什么。但这不是我想要的。我怎样才能得到如下结果?

<div>
   <div>A</div>
   <div>B</div>
</div>
<div class='new-div'>
   <div>C</div>
   <div>D</div>
   <div>E</div>
</div>
<div class='new-div'>
   <div>F</div>
</div>
<div class='new-div'>
   <div>G</div>
   <div>H</div>
   <div>I</div>
   <div>J</div>
</div>
<div class='new-div'>
   <div>K</div>
</div>

5 个答案:

答案 0 :(得分:1)

正如CodeGodie建议的那样,如果你能够制作另一个阵列,那就更好了:

$myArray = array(
    array(
        "NoClass" => array(
                             'A', 
                             'B')),
     array(
        "new-div" => array(
                             'C', 
                             'D', 
                             'E')),
     array(
        "new-div" => array(
                             'F')),
     array(
        "new-div" => array(
                             'G', 
                             'H', 
                             'I', 
                             'J')),
     array(
        "new-div" => array(
                             'K'));
    );

然后使用此代码:

foreach($myArray as $parentDiv) {
    foreach($parentDiv as $className => $subDivs) {
        if($className === "NoClass") {
            $divClass = "";
        else {
            $divClass =  " class='".$className."'";
        }

        // make a new parent div
        echo "<div".$divClass.">";
        // echo subdivs
        foreach($subDivs as $subDiv) {
            echo '<div>' . $subDiv . '</div>';
        }
        // end of parent div
        echo "</div>";
    }
}

答案 1 :(得分:0)

<?php
$divOpen = false;
foreach($myArray as $item) {
    if($item == 'new-div'){
        if($divOpen == true){ echo '</div>'; }
        echo '<div class="new-div">';
        $divOpen = true;
    }else {
        echo '<div>' . $item . '</div>';
    }
}

答案 2 :(得分:0)

我会将你的数组重建成一个像这样的多维数组:

$myArray = [
    'A',
    'B',
    array('C', 'D', 'E'),
    array('F'),
    array('G', 'H', 'I', 'J'),
    array('K')
];

然后以这种方式迭代:

foreach ($myArray as $item) {
    if (is_array($item)) {
        $html = '<div class="new-div">';
        foreach ($item as $letter) {
            $html .= "<div>$letter</div>";
        }
        $html .= '</div>';
    } else {
        $html = "<div>$item</div>";
    }
    echo $html;
}

答案 3 :(得分:0)

这是我解决它的方式,受到Random和CodeGodie的启发。

        $divEnding = '';
        $initDiv = true;
        $firstNewDiv = 0;

        foreach($myArray as $item) {
            if($initDiv) {
                echo "<div class='no-class'>"; 
            }

            if($item === 'new-div') {
                $firstNewDiv++;
                if($firstNewDiv == 1) {
                    echo '</div>';
                }

                echo $divEnding;
                echo "<div class='new-div'>";
                $divEnding = "</div>";
            } else {
                echo '<div>' . $item . '</div>';
            }

            $initDiv = false;
        }

        if($divEnding !== "") {
            echo $divEnding;
        }

答案 4 :(得分:-2)

我会使用$ count变量 - 在foreach的每次迭代中递增它

    $count = 0;

    foreach($myArray as $item) {
         if($count == X || $count == Y){
         echo '<div class='new-div'>'.
         '<div>' . $item . '</div>';
    }
    else if($count == Z || $count == A){
    echo '<div>' . $item . '</div>'.'</div>';
    }
else{
echo '<div>' . $item . '</div>';
    }
$count++;
}