データベースに int (例: 1234512312345) として記録される電話番号がありますが、Web ページでは (12345) 123 - 12345 として表現したいと考えています。それが文字列の場合、substr を使用しますが、それを strval に変換するのは洗練されていないようです。
整数と文字列が明確に異なることは理解していますが、効率の悪い関数を自分で作成せずに、この効果に対して何かを行う手段はありますか?
注:タイトルのためにこれに答える、電話番号を整数として扱うことは良い考えではありません
PHP の型ジャグリング機能を利用し、電話番号に対して文字列関数を使用する必要がありますが、 Cスタイルで行い、整数の操作を維持し たい場合は、次のようにします。
/
演算子、最初の桁を取得するのに役立ちます ( に除算すると最初の桁が得られますが、関数を使用すると が得られるため、すぐにはできませんが、の結果は型であり、型ではないため、ここでも問題が発生する可能性があります) )123
100
123/100=1.23
floor()
floor(123/100)=1
floor()
float
integer
%
演算子。最後の桁を取得するのに役立ちます ( moduloはすぐに整数型の最後の桁を取得します。)123
10
123%10=3
したがって、次のように電話番号から必要な部分を抽出できます (整数の方法):
$last=$no%100000; // get last 5 digits (modulo by 1 followed by 5 zeroes)
$no=$no-$last; // subtract the last digits from original number
$no=$no/100000; // divide to shorten the number, end up with a natural number
$area=$no%1000; // get last 3 again
$prefix=($no-$area)/1000; //remainder is the first digits of the original number
または(float
/ double
/real
方法)-より読みやすい:
$last=$no%1e5; // scientific notation 1e5 = 10000 (1 followed by 5 zeroes)
$no=($no-$last)/1e5;
$area=$no%1e3;
$prefix=($no-$area)/1e3;
ライブ コード: http://codepad.viper-7.com/tVRjXC
注: 科学表記法でe
は type を使用しますfloat
また、32 ビット プラットフォームでの最大整数は2^31 = 2.147.483.648
0077705501234
すると、頭痛の種になります!
したがって、それはデータベースからのものですが、変更によって実際のint
PHPが8進数の先頭の数字を解釈し0
、内部で10進数に変換するため、まったく異なる「電話番号」になります。正確であること。
PHP がそれを として受け取り、string
本当に整数を操作したい場合は、型キャスト(int) $no
または変換$no+0
などを行うことができます。
とにかく、先頭のゼロは整数には関係ありませんが、文字列の場合は問題になるため、最終的 77705501234
には長さのチェックが必要になる場合があります (整数フロートの方法):
カウントし続けるゼロが多すぎるため、フロートを使用します...
番号には数字が必要であることを知っている13
ので、確認することができます。if ( $no > 1e12 )
またif ( $no < 1e14 )
、確認のためにも使用できます。
数値の「長さ」も知りたい場合 (これにはpow()を知る必要があります):
for ($i=1;$i<13;$i++) { //count from 1 to 12
//stop when $no modulo 10^$i is the number
if ( $no % pow(10,$i) == $no ) break;
}
// number of digits of $no are stored in $i - equivalent to strlen()
そして最後に、先行ゼロの整数が欠落している場合でも番号を正しく出力するには:
printf('Your number: (%05u) %03u - %05u',$prefix,$area,$last);
ライブ コード: http://codepad.viper-7.com/Xgr8RQ
補足:大きな数の場合、BCMath関数もありますが、文字列で機能します
Webページに表示するだけですか?
はいの場合、1 つの jquery プラグインを使用してこれを行うことができます。
私にとってのベスト: