<?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
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
7
4
1
1
7
7