3v4l.org

run code in 300+ PHP versions simultaneously
<?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

preferences:
25.19 ms | 402 KiB | 5 Q