服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|

PHP内部实现打乱字符串顺序函数str_shuffle的方法

2019-06-15 11:24写PHP的老王 PHP教程

这篇文章主要给大家介绍了关于PHP内部实现打乱字符串顺序函数str_shuffle的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

2019年春节已过,今天是上班第一天,还得翻一翻之前没有看完的PHP源码。

今天聊的是字符串顺序打乱函数str_shuffle。这个函数本身使用频率并不高。但是,其内部实现还是非常有趣的。

str_shuffle() 函数随机地打乱字符串中的所有字符。

要注意,打乱的是字符串中的“字符”

  • 一个字母等于一个字符
  • 一个汉字等于2个字符

自己实现

如果在没有看PHP源码内部实现之前,如果使用php实现内部字符串打乱顺序的操作,我能想到的是下面几种方式。

循环随机数

使用随机数,可以有随机取字符串的字符拼接,或者顺序取出,放到随机数自定的位置。这两种方式都涉及到随机数重复的情况,需要去重。

PHP内部实现打乱字符串顺序函数str_shuffle的方法

这种方式的重点在于生成不重复的随机数。

切分成数组然后打乱顺序

PHP内部实现打乱字符串顺序函数str_shuffle的方法

用数组打乱顺序的方式实现其实是有些“作弊”嫌疑。

PHP内部实现

来看看PHP内部如何实现。

PHP内部实现打乱字符串顺序函数str_shuffle的方法

其实PHP内部也是使用随机数实现,但是他的巧妙之处在于使用随机数抽取字符串与一个特定的字符串(最后一个)进行替换。这样就不用去考虑随机数重复的问题。不会因为重复到账一些字符串被覆盖。

文章开始的随机数抽取,不能保证经过n次后结束,因为需要跳过随机数重复的情况。但是php内部的实现,都是n次循环后结束。在性能上肯定比需要去重的随机数方法要好。

两个方法的出发点都一样,但是稍微的不一样就可以带来很大的提升。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

延伸 · 阅读

精彩推荐
  • PHP教程PHP+jQuery实现即点即改功能示例

    PHP+jQuery实现即点即改功能示例

    这篇文章主要介绍了PHP+jQuery实现即点即改功能,涉及php数组读取、遍历及jQuery事件响应与动态修改页面元素属性相关操作技巧,需要的朋友可以参考下...

    ztblog 123 2019-06-11
  • PHP教程PHP的微信支付接口使用方法讲解

    PHP的微信支付接口使用方法讲解

    今天小编就为大家分享一篇关于PHP的微信支付接口使用方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    yaohui_h 237 2019-06-04
  • PHP教程PHP implode()函数用法讲解

    PHP implode()函数用法讲解

    今天小编就为大家分享一篇关于PHP implode()函数用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册 148 2019-06-03
  • PHP教程PHP中抽象类,接口功能、定义方法示例

    PHP中抽象类,接口功能、定义方法示例

    这篇文章主要介绍了PHP中抽象类,接口功能、定义方法,简单分析了php抽象类与接口的概念、功能、定义方法及相关注意事项,需要的朋友可以参考下...

    Sweet小马 504 2019-06-09
  • PHP教程详解PHP多个进程配合redis的有序集合实现大文件去重

    详解PHP多个进程配合redis的有序集合实现大文件去重

    这篇文章主要介绍了PHP多个进程配合redis的有序集合实现大文件去重,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习 吧...

    陶士涵的菜地 395 2019-06-05
  • PHP教程PHP添加PNG图片背景透明水印操作类定义与用法示例

    PHP添加PNG图片背景透明水印操作类定义与用法示例

    这篇文章主要介绍了PHP添加PNG图片背景透明水印操作类定义与用法,涉及php操作图片的显示、保存、压缩、水印添加等相关操作技巧,需要的朋友可以参考下...

    tangming20160613 447 2019-06-02
  • PHP教程PHP的简单跳转提示的实现详解

    PHP的简单跳转提示的实现详解

    这篇文章主要介绍了PHP的简单跳转提示的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    kemili 263 2019-05-31
  • PHP教程PHP实现唤起微信支付功能

    PHP实现唤起微信支付功能

    这篇文章主要为大家详细介绍了PHP实现唤起微信支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    潘山伟 330 2019-06-12