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