2

我有一个生成字符串唯一 ID 的 uniqueId 函数。我在javascript中使用它,你可以在这里找到它(见我的回答): Generate unique number based on string input in Javascript

我想在 PHP 中做同样的事情,但是该函数主要生成浮点数而不是无符号整数(超出有符号整数值PHP_MAX_INT),因此我不能使用 PHP 函数dechex()将其转换为十六进制。dechex()仅限于 PHP_MAX_INT 值,因此高于 的每个值PHP_MAX_INT都将返回为FFFFFFFF.

相反,在 javascript 中,当使用 int.toString(32) 时,它会生成一个包含 A..F 以外的其他字母的字符串,例如:

dh8qi9t
je38ugg

如何在 PHP 中实现相同的结果?

4

1 回答 1

1

我建议base_convert($input,10,32),但正如您所观察到的,它不适用于太大的数字。

相反,您可以自己实现它:

function big_base_convert($input,$from,$to) {
  $out = "";
  $alphabet = "0123456789abcdefghijklmnopqrstuvwxyz";
  while($input > 0) {
    $next = floor($input/$to);
    $out = $alphabet[$input-$next*$to].$out; // note alternate % operation
    $input = $next;
  }
  return $out ?: "0";
}
于 2013-04-22T01:01:38.410 回答