PHP中的Vigenère表

问题描述 投票:1回答:2

我正在尝试使用PHP制作Vigenère表。我的目标是在其中创建一个包含26个较小数组的大数组,如下所示:

$bigarray = [['a'-'z']['b'-'a']...['y'-'x']['z'-'y']];

我正在考虑使用range()函数创建第一个数组,将其附加到大数组中,然后使用for循环获取第一个字母,将该字母放在最后并使该数组附加到一个大数组x25

$letterarray = range('a','z');
array_merge($bigarray, $firstarray);

for ($idx = 0; $idx < 26; $idx++) {
    $letterarray = /* Take first letter from $letterarray, put that letter in the end. */
    $bigarray = /* Put the $letterarray into the $bigarray. */

我不知道是否需要使用array_splice()或array_slice()函数。我也不知道如何将小数组放入大数组,同时保持'数组以数组'形式,因为array_merge()只是把每个值都推到一个数组中。

php arrays encryption vigenere
2个回答
1
投票

你的方法很扎实。要执行,您只需要复制前一个数组,然后使用array_shiftarray_push来“循环”它。

$bigarray = [range('a','z')];
for( $i=1; $i<26; $i++) {
    // $i=1 because we already have the first one.
    $copy = $bigarray[$i-1]; // get most recent entry
    array_push($copy,array_shift($copy));
    $bigarray[$i] = $copy;
}

0
投票

感谢您的评论,在我写完这个帖子后,我自己想出了一个方法。

$bigarray = array();
$alphas = range('a', 'z');
$bigarray[0] = $alphas;

for ($idx = 1; $idx <= 25; $idx++) {
    $firstletter = $alphas[0];
    $alphas = array_slice($alphas,1);
    array_push($alphas, $firstletter);
    $bigarray[$idx] = $alphas;
}

它将[az]数组的第一个字母($ alphas)存储在变量$ firstletter中,对$ alphas数组进行切片并在结尾处推送$ firstletter varible中的元素,并将新数组[ba]存储到$ bigarray中。

巧妙的是,array_slice只是自动更改指数。谢谢你的评论:)

-ed

© www.soinside.com 2019 - 2024. All rights reserved.