首页 > 解决方案 > 如何在 php 中使用 for 制作 zig-zag 数字?

问题描述

我有这个代码

<table class="table table-bordered text-center font-weight-bold">
    <tr>
        <?php
        for ($i = 1; $i <= 60; $i++) { ?>
            <td class="<?= $i == 7 || $i == 8 || $i == 11 ? 'bg-danger' : 'bg-success'; ?> m-0 p-0">
                <a href="#" style="text-decoration: none; font-size: 5vw">
                    <div class="h-100 w-100 my-2 text-white">
                        <?= $i; ?>
                    </div>
                </a>
            </td>
            <?php if (!empty($i) && ($i) % 6 == 0) {
            ?>
    </tr>
    <tr>
    <?php } ?>
<?php }
?>
    </tr>
</table>

显示这个 结果我不想

我想要这样的结果

1 2 3 4 5 6

12 11 10 9 8 7

13 14 15 16 17 18

24 23 22 21 20 19

25 26 27 28 29 30

36 35 34 33 32 31

37 38 39 40 41 42

ETC...

我不知道最简单的逻辑是如何工作的

标签: phploopsfor-loopnumbers

解决方案


我按照以下步骤重写了处理循环之前的值的代码:

  1. range()用;创建一个有 60 个连续位置的数组
  2. 将数组分成块,用值制作一个矩阵;
  3. 对于数组中的每一行,反转奇数索引。

$selected数组用于将“bg-danger”类应用于 td。

<table class="table table-bordered text-center font-weight-bold">
<?php
    $numbers = range(1, 60);
    $handle_values = array_chunk($numbers, 6);
    foreach($handle_values as $k => &$hv) {
        if($k & 1) $hv = array_reverse($hv);
    }

    $selected = [7, 8, 11];

    foreach ($handle_values as $values) {
         ?>
        <tr>
            <?php foreach($values as $i) { ?>
                <td class="<?= in_array($i, $selected) ? 'bg-danger' : 'bg-success'; ?> m-0 p-0">
                    <a href="#" style="text-decoration: none; font-size: 5vw">
                        <div class="h-100 w-100 my-2 text-white">
                            <?= $i; ?>
                        </div>
                    </a>
                </td>
            <?php } ?>
        </tr>
    <?php } ?>
</table>

推荐阅读