微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 php 中获得一个 vigenere 表?

如何解决如何在 php 中获得一个 vigenere 表?

我对 PHP 没有太多经验,我正在尝试制作一个 vigenere 表,但它返回空数组 这是我目前所拥有的:

$row= range('a','z');
echo "<table border =\"1\" style='border-collapse: collapse'>";
for ( $row = 1; $row <= 26; $row++) { 
    echo "<tr> ";
    for ($col = 1; $col <= 26; $coL++) { 
       $p = range('a','z');
       echo "<td>$p</td> ";
        }
        echo "</tr>";
    }
    echo "</table>";

解决方法

您是否要从 A-Z 创建一个包含 26 行 26 列的表格?例如...

+---+---+---+---+---+---+---+-----+---+---+---+
| A | B | C | D | E | F | G | ... | X | Y | Z |
| A | B | C | D | E | F | G | ... | X | Y | Z |
| A | B | C | D | E | F | G | ... | X | Y | Z |
| A | B | C | D | E | F | G | ... | X | Y | Z |
| A | B | C | D | E | F | G | ... | X | Y | Z |
| ...                                         |
| A | B | C | D | E | F | G | ... | X | Y | Z |
+---+---+---+---+---+---+---+-----+---+---+---+

如果这就是你想要做的,你可以通过以下方式做到这一点:

echo '<table border="1" style="border-collapse: collapse;">';
    foreach (range('a','z') as $row_char) {
        echo '<tr>';
            foreach (range('a','z') as $col_char) {
                echo '<td>';
                    echo $col_char;
                echo '</td>';
            }
        echo '</tr>';
    }
echo '</table>';

输出:https://jsfiddle.net/thelevicole/23tgsoe1/

,

您的尝试存在一些问题:

  • 您在 $row 中设置了字母范围,但是当您在外循环中将其用作计数器时覆盖了 $row
  • 在您的内部循环中,您将一个新的字母范围创建为一个数组,但尝试将它们作为一个字符串输出,这会在每一行上引发 PHP 警告。
  • 您的代码不会在每行之间轮换字母,因此 Vigenère 密码根本不起作用。

从任何合适的数组开始,您可以通过一个循环创建所需的结果,并小心使用 implode() 来创建行:

declare(strict_types=1);
function vigenere(array $arr){
    $output = "<table>\n";


    // iterate over the array
    foreach($arr as $letter) {
        // Create output row
        $output .= '<tr><td>'.implode('</td><td>',$arr).'</td></tr>'.PHP_EOL;
        // rotate the array for the next row
        $arr[] = array_shift($arr);
    }
    $output .= '</table>';
    return $output;
}

echo vigenere(range("A","Z"));

演示:https://3v4l.org/mYEMk

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。