<?php
function getKey($current, $step): int
{
$keys = [1,2,3,4,5,6,7];
$currentKey = array_search($current, $keys);
$size = count($keys);
// normalize step offset
$step = ($step % $size) + $size;
// ^-----------^ ^-----^
// │ └ move possible negative to positive
// └ get a value from -7 to +7
// add offset for current key
$newKey = ($currentKey + $step) % $size;
// ^-----------------^ ^-----^
// │ └ wrap around in case we exceed $size
// └ add normalized step offset to new element to current
return $keys[$newKey];
}
// Tests
echo getKey(1,-1) . PHP_EOL;
echo getKey(3,1) . PHP_EOL;
echo getKey(7,1) . PHP_EOL;
echo getKey(7,15) . PHP_EOL; // same as +1
echo getKey(1,-8) . PHP_EOL; // same as -1
echo getKey(1,-15) . PHP_EOL; // same as -1