<?php
function str_compare(string $left, string $right): int
{
$length = mb_strlen($left, '8bit');
if (mb_strlen($right, '8bit') !== $length) {
throw new Exception('ct_select() expects two strings of equal length');
}
$gt = 0;
$eq = 1;
$i = $length;
while ($i > 0) {
--$i;
$leftCharCode = unpack('C', $left[$i])[1];
$rightCharCode = unpack('C', $right[$i])[1];
$gt |= (($rightCharCode - $leftCharCode) >> 8) & $eq;
$eq &= (($rightCharCode ^ $leftCharCode) -1) >> 8;
}
return ($gt + $gt + $eq) - 1;
}
var_dump(
str_compare('baaaaaaaa', 'aaaaaaaaa'),
str_compare('aaaaaaaaa', 'aaaaaaaaa'),
str_compare('aaaaaaaaa', 'baaaaaaaa')
);
preferences:
24.93 ms | 406 KiB | 5 Q