PHP 4、使用str_replace去除金額格式的逗號(hào)以及某數(shù)組函數(shù)的性能對(duì)比

str_replace — 子字符串替換

mixed str_replace( mixed $search, mixed $replace, $mixed $subject[, int &$count ] )

該函數(shù)返回一個(gè)字符串或者數(shù)組硕并。該字符串或數(shù)組是將 subject 中全部的 search 都被 replace 替換之后的結(jié)果法焰。

如果沒有一些特殊的替換需求(比如正則表達(dá)式),你應(yīng)該使用該函數(shù)替換 ereg_replace() 和 preg_match()

參數(shù)

如果 searchreplace 為數(shù)組倔毙,那么 str_replace() 將對(duì) subject 做二者的映射替換埃仪。如果 replace 的值的個(gè)數(shù)少于 search 的個(gè)數(shù),多余的替換將使用空字符串來進(jìn)行陕赃。如果 search 是一個(gè)數(shù)組而 replace 是一個(gè)字符串贵试,那么 search 中每個(gè)元素的替換將始終使用這個(gè)字符串。該轉(zhuǎn)換不會(huì)改變大小寫凯正。

str_replace傳送門

這里我們使用number_format函數(shù)快速格式化一個(gè)數(shù)字得到一個(gè)金額格式的字符串,這里是number_format傳送門
$a = '12312312312312.1231231111111111';經(jīng)過number_format$b = number_format( $a, 2, '.', ',' );

因?yàn)橹灰诵?shù)點(diǎn)兩位豌蟋,所以千分位開始舍去廊散,變成了這個(gè)12,312,312,312,312.12

需要把經(jīng)過number_format格式化好的字符串再變回來,可以使用如下代碼$c = str_replace( ',', '', $b );

現(xiàn)在梧疲,有兩兄弟表示不服允睹,這么簡(jiǎn)單的字符串處理工作,用它們倆也可以實(shí)現(xiàn)

先上最終代碼

$a = '12312312312312.1231231111111111';
$b = number_format( $a, 2, '.', ',' );
echo $b;
echo '
';
$time1 = microtime( true );
for ( $i = 1; $i <= 100000; $i++ ) {
    $c = str_replace( ',', '', $b ); // 直接用str_replace函數(shù)進(jìn)行字符串替換
}
$time2 = microtime( true );
echo $c, ':', $time2 - $time1;
for ( $i = 1; $i <= 100000; $i++ ) {
    $c = implode( '', explode( ',', $b ) ); //使用數(shù)組函數(shù)分割后拼接得到相似效果
}
$time3 = microtime( true );
echo '
';
echo $c, ':', $time3 - $time2;

結(jié)果

12,312,312,312,312.12
12312312312312.12:0.27701592445374
12312312312312.12:0.64003705978394[Finished in 1.0s]
  • 這里其實(shí)注意到幌氮,金額格式的字符串缭受,有個(gè)很明顯的特征,就是用逗號(hào),分割该互,自然想到了數(shù)組函數(shù)中的implodeexplode米者,傳送門在此implodeexplode

  • 所以可以通過先根據(jù)逗號(hào),拆分出數(shù)組,再用空字符串''拼接蔓搞,得到想要的結(jié)果

  • 只是胰丁,兩兄弟的速度和str_replace的比起來,實(shí)在……

  • 題外話喂分,implode由于歷史原因锦庸,接收兩種類型的參數(shù),也就是蒲祈,兩個(gè)參數(shù)可以換著寫甘萧,這算是一個(gè)比較好玩的地方吧

  • 此外,這里再說一個(gè)關(guān)于number_format的一個(gè)不算bugbug
    如果這個(gè)數(shù)字太長(zhǎng)了梆掸,后面的值是會(huì)被強(qiáng)制變成0的扬卷!這……看看number_format的參數(shù)類型就知道,只接收float沥潭,因此這里提供一個(gè)可以接收任意字符長(zhǎng)度的函數(shù)邀泉,只是想通過這個(gè)函數(shù)來說明這個(gè)所謂的bug,并不是真的要重寫钝鸽,畢竟汇恤,最后的測(cè)試結(jié)果表明,我寫的這個(gè)函數(shù)效率是number_format的四分之一……

代碼如下

function a( $a ) {
    list($int, $dot) = explode( '.', $a );
    $str = '';
    $length = strlen( $int );
    $pos = 0;
    for ( $i = $length - 1; $i >= 0; $i-- ) {
        $delimiter = $pos % 3 == 0 && $pos != 0 ? ',' : '';
        $str = $int{$i} . $delimiter . $str;
        $pos++;
    }
    return $str . '.' . $dot;
}

一般來說拔恰,number_format已經(jīng)夠用了因谎,所以,更強(qiáng)大的擴(kuò)展留給未來的PHPX吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颜懊,一起剝皮案震驚了整個(gè)濱河市财岔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌河爹,老刑警劉巖匠璧,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咸这,居然都是意外死亡夷恍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門媳维,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酿雪,“玉大人,你說我怎么就攤上這事侄刽≈咐瑁” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵州丹,是天一觀的道長(zhǎng)醋安。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么茬故? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任盖灸,我火速辦了婚禮,結(jié)果婚禮上磺芭,老公的妹妹穿的比我還像新娘赁炎。我一直安慰自己,他們只是感情好钾腺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布徙垫。 她就那樣靜靜地躺著,像睡著了一般放棒。 火紅的嫁衣襯著肌膚如雪姻报。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天间螟,我揣著相機(jī)與錄音吴旋,去河邊找鬼。 笑死厢破,一個(gè)胖子當(dāng)著我的面吹牛荣瑟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摩泪,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼笆焰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了见坑?” 一聲冷哼從身側(cè)響起嚷掠,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荞驴,沒想到半個(gè)月后不皆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊楼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年粟焊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孙蒙。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悲雳,靈堂內(nèi)的尸體忽然破棺而出挎峦,到底是詐尸還是另有隱情,我是刑警寧澤合瓢,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布坦胶,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏顿苇。R本人自食惡果不足惜峭咒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纪岁。 院中可真熱鬧凑队,春花似錦、人聲如沸幔翰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遗增。三九已至叫惊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間做修,已是汗流浹背霍狰。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饰及,地道東北人蔗坯。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旋炒,于是被迫代替她去往敵國(guó)和親步悠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容