今天聊的是字符串順序打亂函數(shù)str_shuffle。這個(gè)函數(shù)本身使用頻率并不高。但是,其內(nèi)部實(shí)現(xiàn)還是非常有趣的。
str_shuffle() 函數(shù)隨機(jī)地打亂字符串中的所有字符。
要注意,打亂的是字符串中的“字符”
一個(gè)字母等于一個(gè)字符一個(gè)漢字等于2個(gè)字符自己實(shí)現(xiàn)
如果在沒有看php源碼內(nèi)部實(shí)現(xiàn)之前,如果使用php實(shí)現(xiàn)內(nèi)部字符串打亂順序的操作,我能想到的是下面幾種方式。
循環(huán)隨機(jī)數(shù)
使用隨機(jī)數(shù),可以有隨機(jī)取字符串的字符拼接,或者順序取出,放到隨機(jī)數(shù)自定的位置。這兩種方式都涉及到隨機(jī)數(shù)重復(fù)的情況,需要去重。
這種方式的重點(diǎn)在于生成不重復(fù)的隨機(jī)數(shù)。
切分成數(shù)組然后打亂順序
用數(shù)組打亂順序的方式實(shí)現(xiàn)其實(shí)是有些“作弊”嫌疑。
php內(nèi)部實(shí)現(xiàn)
來看看php內(nèi)部如何實(shí)現(xiàn)。
其實(shí)php內(nèi)部也是使用隨機(jī)數(shù)實(shí)現(xiàn),但是他的巧妙之處在于使用隨機(jī)數(shù)抽取字符串與一個(gè)特定的字符串(最后一個(gè))進(jìn)行替換。這樣就不用去考慮隨機(jī)數(shù)重復(fù)的問題。不會(huì)因?yàn)橹貜?fù)到賬一些字符串被覆蓋。
文章開始的隨機(jī)數(shù)抽取,不能保證經(jīng)過n次后結(jié)束,因?yàn)樾枰^隨機(jī)數(shù)重復(fù)的情況。但是php內(nèi)部的實(shí)現(xiàn),都是n次循環(huán)后結(jié)束。在性能上肯定比需要去重的隨機(jī)數(shù)方法要好。
兩個(gè)方法的出發(fā)點(diǎn)都一樣,但是稍微的不一樣就可以帶來很大的提升。
電腦如何安裝無線路由器|電腦安裝無線路由器的方法湖南長(zhǎng)沙云服務(wù)器秒殺云主機(jī)如何建設(shè)營(yíng)銷型的網(wǎng)站加拿大云服務(wù)器租用云計(jì)算行業(yè)有哪些職位多臺(tái)服務(wù)器搭建云服務(wù)器配置云服務(wù)器怎么加防御在excel2010中,在什么功能區(qū)可進(jìn)行工作簿視圖方式的切換