PHPで半角数字を漢数字の単位付きの表記に変換したい

f:id:IlIIlIIIlIIlI:20211107203557p:plain

53000053万みたいに漢数字の単位を付けたかった。
タイトルに漢数字って書いてあるから詐欺ってるみたいだけど五三万への変換は今回はやりません。🙇🏿‍

早速コード

<?php

function convert($value) {
    // 1000以下の場合は単位を付けずに返却
    if ((int) $value < 1000) {
        return (string) $value;
    }

    $units = ['', '万', '億', '兆', '京'];

    // 右から桁数を分割していく
    $splits = array_reverse(str_split(strrev($value), 4));

    // 桁数によって使用する単位の調整
    array_splice($units, count($splits));
    $filterUnits = array_reverse($units);

    $convert = '';
    // 反転した数値を元に戻して単位をつける
    foreach ($splits as $index => $split) {
        // 0000の場合、表記を省略する
        $convert .= (int) $split === 0 ? '' : number_format(strrev($split)) . $filterUnits[$index];
    }

    return $convert;
}

assert('私の戦闘力は53万です。' === '私の戦闘力は'.convert('530000').'です。'); // true

感想

  • 単位が飛ぶ時の表記をどうしようか迷ったけど, 単位が0000の場合は省略するようにした。
    (100000001の場合, 1億0000万0001ではなく1億1の表記になる)
  • 反対に, 漢字(53万) → 半角数字(530000)に変換するのも考えたけど, 意外とやることが多くて諦めた。
    必要に迫られたらやる。(やらないフラグ)
  • 漢字単位への変換前に文字列に変換すれば京以上の単位も付けれるんだろうけど, お金周りの変換がしたかっただけだから考慮してない。PHP_INT_MAX を超過する数値を扱いたい人はこっち来ないで😭😭😭
  • 全体的にトリッキーなので誰か別の方法ご存知でしたらご指摘ください🙏🏻
  • JSでやったほうが需要ありそう

github.com

packagist.org