массивы — таблица Vigenère в переполнении стека

Я пытаюсь сделать таблицу Vigenère, используя PHP. Моя цель — создать большой массив с 26 меньшими массивами, например так:

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

Я думаю о создании первого массива, используя спектр() добавьте это в большой массив, затем используйте цикл 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 () просто пихает каждое значение в один массив.

1

Решение

Ваш подход твердый. Для выполнения вам просто нужно скопировать предыдущий массив, а затем использовать array_shift а также array_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;
}
1

Другие решения

Спасибо за ваш комментарий, после того как я написал эту ветку, я сам придумал способ.

$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 в конце и сохраняет новый массив [ba] в $ bigarray. ,

Отличная вещь в том, что array_slice просто меняет индексы автоматически.
Спасибо за комментарий 🙂

-издание

0

По вопросам рекламы [email protected]