/*
string = "aaa"
After shifting the first 1 letter by 1 = "baa"
After shifting the first 2 letters by 2 = "dca"
After shifting the first 3 letters by 3 = "gfd"
result = "gfd"
*/
function shifLetters($str, $shifts) {
$size = count($shifts);
$arr = str_split($str);
for ($i = $size - 1; $i >= 0; $i--) {
if ($i + 1 < $size) {
$shifts[$i] += $shifts[$i + 1];
}
$shifts[$i] = $shifts[$i] % 26;
$asciicode = ord($str[$i]) - ord('a');
$asciicode = $asciicode + $shifts[$i];
if ($asciicode > 25) {
$asciicode = $asciicode - 26;
}
$arr[$i] = chr((ord('a') + $asciicode));
}
return implode($arr);
}
$str = "aaa";
$shifts = array(1, 2, 3);
$str = shifLetters($str, $shifts);
echo $str;
/*
run:
gfd
*/