While loop problem in PHP

后端 未结 5 901
遥遥无期
遥遥无期 2021-01-27 03:48

I have my markup structure as below:

value1
value2
value3
相关标签:
5条回答
  • 2021-01-27 04:24

    Right, now I know what you're after. I've done this before when showing items in a grid and you need to break each row because of that browser.

    Anyway, it's ugly but I don't think it gets any easier than this

    <?php for ($i = 0, $total = count($resultSet); $i < $total; $i += 4) : ?>
    <div>
        <?php
        for ($j = $i; $j < ($i + 4); $j++) :
        if (!isset($resultSet[$j])) :
        ?>
        <div class="clear"></div>
        </div>
        <?php break 2; endif ?>
        <div><?php echo htmlspecialchars($resultSet[$j]) ?></div>
        <?php endfor ?>
        <div class="clear"></div>
    </div>
    <?php endfor ?>
    
    0 讨论(0)
  • 2021-01-27 04:31

    By getting some idea from logic given here I tried following and it works.

    <div> <!-- started main div -->
    
    <?php 
        $icount = 1;
        $itotal = mysql_num_rows($result_rs);
        while ($rs = mysql_fetch_array($result_rs)) {
            echo '<div>'.$rs['value'].'</div>'; 
    
            if ($icount % 4 == 0 && $icount != $itotal){
                echo '<div class="clear"></div>';
                echo '</div>'; //closed main div
    
                echo '<div>'; //started new main div
            }
    
            $icount++;
        }
    ?>
    
    </div> <!-- closed main div -->
    

    That, solved my problem.

    Edited: added itotal condition, so when you will have only 4 records per page then also this will work properly.

    0 讨论(0)
  • 2021-01-27 04:32

    The preconfig...

    <?php
        $num_of_results = sizeof($your_array);  
        $loops = ceil($num_of_results/4);
        $k = 0;
    ?>
    

    In your web

    <?php for($p = 0; $p < $loops; $p++) { ?>
        <div>
            <div>
            <?php for($i = 0; $i < 4 && $k < $num_of_results; $i++) { ?>
                <div><?php echo $your_array[$k]; $k++;?></div>
            <?php } ?>
            <div class="clear"></div>
            </div>
        </div>
        <?php } ?>
    

    That's your problem isnt it?

    0 讨论(0)
  • 2021-01-27 04:37
    <div>
        <?php for ($i = 1; $i <= 9; $i++): ?>
        <?php if ($i%4 == 1 && $i != 1): ?>
        <div class="clear"></div>
    </div>
    <div>
        <?php endif; //$i%4 == 1 && $i != 1 ?>
        <div>Value <?php echo $i ?></div>
        <?php endfor; //$i = 1; $i <= 9; $i++ ?>
        <div class="clear"></div>
    </div>
    

    or with an array:

    <div>
        <?php foreach ($arr as $k=>$v): ?>
        <?php if (($k+1)%4 == 1 && $k != 0): ?>
        <div class="clear"></div>
    </div>
    <div>
        <?php endif; //($k+1)%4 == 1 && $k != 0 ?>
        <div><?php echo $v ?></div>
        <?php endforeach; //$arr as $k=>$v ?>
        <div class="clear"></div>
    </div>
    

    or with a mysqli resultset:

    <div>
        <?php $count = 1 ?>
        <?php while ($row = mysqli_fetch_array($result)): ?>
        <?php if ($count%4 == 1 && $count != 1): ?>
        <div class="clear"></div>
    </div>
    <div>
        <?php endif; //$count%4 == 1 && $count != 1 ?>
        <div><?php echo $row['value'] ?></div>
        <?php $count++ ?>
        <?php endwhile; ?>
        <div class="clear"></div>
    </div>
    
    0 讨论(0)
  • 2021-01-27 04:42

    Why not use modulo to "close" a div?

    <div>
    <?php foreach($data as $key => $value) : ?>
        <div><?php echo $value ?></div>
    <?php if($key % 4 == 0 && $key != 0) : // add a clearing div, close the first group and open another one ?>
        <div class="clear"></div>
    </div>
    <div>
    <? endforeach ?>
    <?php if($key % 4 != 0) : // div has not been closed as the number of records % 4 was not equal 0 ?>
        <div class="clear"></div>
     </div>
    <? endif ?>
    
    0 讨论(0)
提交回复
热议问题