PHPで型変換せず数値の一部を取得する


例えば12345という数字があったとき、これを  
123、234、345という風に分けるのを数字のまますることはできますか。Pythonでstringにしてスライスをするとかは思い付いたのですが、数字のままそういうことをしたいです。




PHPに限らない話ですが、整数値の下n桁を求めたい場合には剰余演算が使えます。

[code]

    $num = 12345;
    $a = $num % 1000;
    echo $a."\n"; //-> 345
    
[/code]

下n桁ではなく、途中のn桁分を取りたいのであれば、取りたい桁が下n桁になるように割り算してから同じことをやってやれば良い訳です。

[code]

    $b = intdiv($num,10) % 1000;
    echo $b."\n"; //->234
    $c = intdiv($num,100) % 1000;
    echo $c."\n"; //->123
    
[/code]

(PHPの`%`演算子の動作からは`intdiv($num,10)`とかでなく、普通に`($num/10)`とかにしても動きそうなんですが、念のため`intdiv`を使っておきました。`intdiv`が存在しないバージョンの場合、`(int)($num/10)`等に置き換えるか、自分で`intdiv`を定義してください。)

特定の桁数ではなく一般的にと言うとちょっと面倒になりますが、`10`,`100`,`1000`とかの代わりに`pow(10,$n)`とかを使えば良いでしょう。

[code]

    $m = 2;  //->下位から数えて`$m`桁目から
    $n = 3;  //->`$n`桁分を取得する
    $d = intdiv($num,pow(10,$m)) % pow(10,$n);
    echo $d."\n";  //-> 123
    
[/code]

式だけパッと見せられて何をやっているのかがすぐにわかると言うものではないので、実用的にはPythonの例として見つけられたような文字列を介するやり方の方が良いかもしれません。

