最近一個練習用的案子需要用到字串輸出。由於是在 console 端輸出,所以就想要把輸出結果對齊。用了 sprintf 這個 php 內建的功能和官網文件上的範例,拼拼湊湊試了很久,把想要的結果印好之後,回頭檢查才發現每一行我下的參數都不大一樣,於是花了點時間研究一下。


如果需要對齊的字串是 ASCII 範圍內的字元,基本上沒有問題:

>>> sprintf('%-80s: test', 'abcdefg hijklmnop qrstuv wxyz 1234567890 !@#$%^&*()-={}[]|\;:\'",<.>/?')
=> "abcdefg hijklmnop qrstuv wxyz 1234567890 !@#$%^&*()-={}[]|\;:'",<.>/?           : test"

要對齊的字串出現一些歐語系常見的字母時,就開始有問題了:

>>> sprintf('%-80s: test', 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß¼½¾')
=> "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß¼½¾          : test"

更不用說中日韓語系字元了:

>>> sprintf('%-80s: test', '許茹芸淚海慶功宴吃蓋飯')
=> "許茹芸淚海慶功宴吃蓋飯                                               : test"
>>> sprintf('%-80s: test', 'あかさたなはまやらわイキシチニヒミイリウィ')
=> "あかさたなはまやらわイキシチニヒミイリウィ                 : test"
>>> sprintf('%-80s: test', 'アカサタナハマヤラワイキシチニヒミイリウィ')
=> "アカサタナハマヤラワイキシチニヒミイリウィ                 : test"
>>> sprintf('%-80s: test', '트와이스 나연 정연 모모 사나 지효 미나 다현 채영 쯔위')
=> "트와이스 나연 정연 모모 사나 지효 미나 다현 채영 쯔위     : test"

目前要印的資料剛好沒有遇到 CJK ambiguous width 的問題,所以就直接手動調整 %s 的數字解決…當然如果是在不需要等寬對齊的狀況,就沒有這個問題了。

,

repeat<">< 發表在 痞客邦 PIXNET 留言(0) 人氣()