亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在PHP中顯示帶序數后綴的數字

在PHP中顯示帶序數后綴的數字

PHP
MMTTMM 2019-10-15 15:35:06
我想顯示數字如下1為1,2作為第二,...,150至150。如何為代碼中的每個數字找到正確的序數后綴(st,nd,rd或th)?
查看完整描述

3 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

PHP為此提供了內置功能。它甚至可以處理國際化!


$locale = 'en_US';

$nf = new NumberFormatter($locale, NumberFormatter::ORDINAL);

echo $nf->format($number);

請注意,此功能僅在PHP 5.3.0及更高版本中可用。


查看完整回答
反對 回復 2019-10-15
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

通過利用PHP內置的日期/時間函數中的類似功能,可以單行完成此操作。我謙虛地提出:


解:


function ordinalSuffix( $n )

{

  return date('S',mktime(1,1,1,1,( (($n>=10)+($n>=20)+($n==0))*10 + $n%10) ));

}

詳細說明:


內置date()函數具有后綴邏輯,用于處理每月第n天的計算。當S以格式字符串給出時,返回后綴:


date( 'S' , ? );

由于date()需要的時間戳(對于?以上),我們將通過我們的整數$n作為day參數mktime()和使用的虛值1的hour,minute,second,和month:


date( 'S' , mktime( 1 , 1 , 1 , 1 , $n ) );

實際上,對于一個月中某天(即$n > 31)超出范圍的值,這實際上會正常失敗,但是我們可以添加一些簡單的內聯邏輯以將上限設置$n為29:


date( 'S', mktime( 1, 1, 1, 1, ( (($n>=10)+($n>=20))*10 + $n%10) ));

唯一的正值(2017年5月)失敗的原因是$n == 0,但通過在特殊情況下添加10可以輕松解決:


date( 'S', mktime( 1, 1, 1, 1, ( (($n>=10)+($n>=20)+($n==0))*10 + $n%10) ));

2017年5月更新


如@donatJ所觀察到的那樣,由于>=20檢查始終返回true ,因此上述結果在100以上(例如“ 111st”)失敗。要在每個世紀重置這些值,我們在比較中添加一個過濾器:


date( 'S', mktime( 1, 1, 1, 1, ( (($n>=10)+($n%100>=20)+($n==0))*10 + $n%10) ));

只需將其包裝在一個函數中即可,以方便使用!


查看完整回答
反對 回復 2019-10-15
  • 3 回答
  • 0 關注
  • 419 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號