用PHP捣鼓一个雪花算法

本文给大家聊聊雪花算法的PHP实现,希望对需要的朋友有所帮助!

本文给大家聊聊雪花算法的PHP实现,希望对需要的朋友有所帮助!

雪花算法的实现

最近看了下雪花算法,自己试着写了一下

<?php
class SnowFlake
{
const TWEPOCH = 0; // 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动)
const WORKER_ID_BITS = 5; // 机器标识位数
const DATACENTER_ID_BITS = 5; // 数据中心标识位数
const SEQUENCE_BITS = 12; // 毫秒内自增位
private $workerId; // 工作机器ID
private $datacenterId; // 数据中心ID
private $sequence; // 毫秒内序列
private $maxWorkerId = -1 ^ (-1 << self::WORKER_ID_BITS); // 机器ID最大值
private $maxDatacenterId = -1 ^ (-1 < $this->maxDatacenterId || $datacenterId maxDatacenterId} or less than 0\”);
}
$this->workerId = $workerId;
$this->datacenterId = $datacenterId;
$this->sequence = $sequence;
}
public function createId()
{
$timestamp = $this->createTimestamp();
if ($timestamp lastTimestamp) {//当产生的时间戳小于上次的生成的时间戳时,报错
$diffTimestamp = bcsub($this->lastTimestamp, $timestamp);
throw new Exception(\”Clock moved backwards. Refusing to generate id for {$diffTimestamp} milliseconds\”);
}
if ($this->lastTimestamp == $timestamp) {//当生成的时间戳等于上次生成的时间戳的时候
$this->sequence = ($this->sequence + 1) & $this->sequenceMask;//序列自增一次
if (0 == $this->sequence) {//当序列为0时,重新生成最新的时间戳
$timestamp = $this->createNextTimestamp($this->lastTimestamp);
}
} else {//当生成的时间戳不等于上次的生成的时间戳的时候,序列归0
$this->sequence = 0;
}
$this->lastTimestamp = $timestamp;
return (($timestamp – self::TWEPOCH) datacenterId workerId sequence;
}
protected function createNextTimestamp($lastTimestamp) //生成一个大于等于 上次生成的时间戳 的时间戳
{
$timestamp = $this->createTimestamp();
while ($timestamp createTimestamp();
}
return $timestamp;
}
protected function createTimestamp()//生成毫秒级别的时间戳
{
return floor(microtime(true) * 1000);
}
}
?>登录后复制

php入门到就业线上直播课:立即学习全程直播 + 实战授课 + 边学 + 边练 + 边辅导

PHP算法练习十二:获取n和51之间的绝对值并按要求返回值

原创2021-08-31 09:22:121116 + php学习QQ群(点击入群)在之前的文章《PHP算法练习十一:检查两个给定整数是否在指定范围内》中给大家介绍了怎么检查两个给定整数是否在指定范围内,有需要的朋友可以学习了解一下~

本文将继续给大家带来PHP算法练习系列内容。【推荐:PHP算法练习系列大汇总(持续更新~)】

首先给大家具体描述一下本文所要解决的问题:“如何编写一个 PHP 程序来获取 n 和 51 之间的绝对值。如果 n 大于 51,则返回绝对值的三倍”。

相关介绍:绝对值是指一个数在数轴上所对应点到原点的距离,用“| |”来表示。|b-a|或|a-b|表示数轴上表示a的点和表示b的点的距离。

下面我们直接上代码:

$x)
{
return ($n – $x)*3;
}
return $x – $n;
}
echo test(53).\”\”;
echo test(30).\”\”;
echo test(51).\”\”;登录后复制

执行结果如下:

6
21
0登录后复制

很简单的实现吧!

在这里主要需要大家掌握if条件语句的运用,然后根据要求来实现执行过程。比如本示例中,要求如果n 大于 51则返回绝对值的三倍,也就是要执行“($n – $x)*3;”公式;相反则直接返回两个数的绝对值。

相关介绍:

在 PHP 中,我们可以使用以下条件语句:

  • if 语句:如果指定条件为真,则执行代码;

  • if…else 语句:如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码;

  • if…elseif….else 语句:根据两个以上的条件执行不同的代码块;

  • switch 语句:选择多个代码块之一来执行。

最后给大家推荐最新最全面的《PHP视频教程》~快来学习吧!

php入门到就业线上直播课:立即学习全程直播 + 实战授课 + 边学 + 边练 + 边辅导

以上就是PHP算法练习十二:获取n和51之间的绝对值并按要求返回值的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/26609/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-27 8:45:22
下一篇 2022-09-27 8:46:00

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!