3v4l.org

run code in 300+ PHP versions simultaneously
<?php $closestRadix = function(int $num) : int { $index = floor(log($num, 10)); $nextMag = 10**($index+1); return $nextMag - $num > $nextMag / 2 ? $index: $index + 1; }; $numDigits = function(int $num) : int { return floor(log($num, 10)) + 1; }; $isEven = function(int $num) : bool { return $num % 2 == 0; }; $isEvenNumberOfDigits = function(int $num) : bool { return $isEven($numDigits($num)); }; $mirror = function(int $num, bool $parityCase = false) : int { echo $num . "\n"; return (int)($parityCase ? substr((string)$num, 0, -1) : (string)$num . strrev((string)$num)); }; $halves = function(int $num) use ($isEvenNumberOfDigits, $numDigits) : array { $digitsPerHalf = $isEvenNumberOfDigits ? $numDigits($num)/2 : ceil($numDigits($num)/2); echo $digitsPerHalf; return [ substr((string)$num, 0, $digitsPerHalf), substr((string)$num, $digitsPerHalf, $digitsPerHalf) ]; }; $nextPalindrome = function(int $num) use ($halves, $mirror) : int { print_r($halves($num)); $smallestHalf = min($halves($num)); echo $smallestHalf . "\n"; return $halves($num)[0] == $smallestHalf ? $mirror($halves($num)[0])+1 : $mirror($halves($num)[1]); }; echo $nextPalindrome(110); ?> === 110 120 -> 121 999 1312 1314 -> 1331 121 131 191 202 1221 3113 9999

preferences:
50.65 ms | 402 KiB | 5 Q