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