<?php
$characters = ['a', 'b', 'c'];
$string = 'cccc';
$characters = array_flip($characters);
$base = count($characters);
$chrs_to_ords =
array_map(
function (string $char) use ($characters) : int {
return $characters[$char];
},
preg_split('//u', $string, -1, \PREG_SPLIT_NO_EMPTY)
);
$ords =
implode('', $chrs_to_ords);
$baseN =
base_convert($ords, $base, 10);
$length = strlen($baseN);
$next_number =
str_pad($baseN + 1, $length, '0', \STR_PAD_LEFT);
$next_number =
base_convert($next_number, 10, $base);
$characters = array_flip($characters);
$next_chars = array_map(
function(int $ord) use ($characters) {
return $characters[$ord];
},
str_split($next_number)
);
$next_string = implode('', $next_chars);
var_dump($next_string);
preferences:
29.99 ms | 412 KiB | 5 Q