前言
2019年春节已经过去了,今天又是上班第一天,我要把之前还没看完的PHP源代码翻一倍。
今天我们讨论的是str_shuffle,一个字符串无序函数。这个功能本身并不常用。然而,它的内部实现非常有趣。
函数的作用是:随机打乱一个字符串中的所有字符。
应该注意的是,被干扰的是字符串中的“字符”
一个字母等于一个字符,一个汉字等于两个字符
如果在看php源代码的内部实现之前,先用PHP实现内部字符串的无序,我可以想到以下几种方法。
循环随机数
使用随机数,可以拼接随机字符串的字符,也可以按顺序取出,放在随机数确定的位置。这两种方法都涉及随机数复制,需要进行复制。
这种方法的重点是生成不重复的随机数。
切成数组,然后乱序
事实上,有一些“作弊”嫌疑人是以无序排列的方式进行的。
PHP的内部实现
让我们看看它是如何在PHP中实现的。
其实PHP也是用随机数实现的,但它的巧妙之处在于用随机数提取字符串,并用特定的字符串(最后一个)替换。这样,我们就不用考虑随机数重复的问题了。有些字符串不会因为重复到达而被覆盖。
文章开头的随机数抽取不能保证n次后结束,因为需要跳过随机数重复。然而,php的内部实现在n个周期后结束。性能肯定比需要复制的随机数法要好。
两种方法的出发点是一样的,但稍有不同就能带来很大的提升。
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。