以下のような情報をPHPでfetchAll(PDO::FETCH_ASSOC);
しております。
php
1//$loansの内容 2Array 3( 4 [0] => Array 5 ( 6 [id] => 1 //mysqlの型:INT 7 [name] => loan_A //mysqlの型:STRING 8 [ttl] => 9000000000 //mysqlの型:BIGINT 9 [edate] => 2021-04-28 //mysqlの型:DATE 10 [mdate] => 2030-04-26 //mysqlの型:DATE 11 [type] => 変動 //mysqlの型:STRING 12 [spread] => 0.275 //mysqlの型:DOUBLE 13 ) 14 [1] => Array 15 ( 16 [id] => 2 //mysqlの型:INT 17 [name] => loan_B //mysqlの型:STRING 18 [ttl] => 5000000000 //mysqlの型:BIGINT 19 [edate] => 2022-04-28 //mysqlの型:DATE 20 [mdate] => 2031-04-26 //mysqlの型:DATE 21 [type] => //mysqlの型:STRING 22 [spread] => 0.222 //mysqlの型:DOUBLE 23 ) 24)
これをJavaScriptでオブジェクトとして利用してく以下のようにHTMLに出力することを考えました。
php
1//output.php 2<script type="text/javascript"> 3 var loans =<?=json_encode($loans,JSON_UNESCAPED_UNICODE)?>; 4</script>
Javascript
1var loans =[ 2{ 3id":1, 4"name":"Facility_057", 5"ttl":"9000000000",//here1 6"edate":"2021-04-28", 7"mdate":"2030-04-26", 8"type":"変動", 9"spread":0.27500000000000002220446049250313080847263336181640625//here2 10}, 11{ 12id":1, 13"name":"Facility_057", 14"ttl":"9000000000", 15"edate":"2022-04-28", 16"mdate":"2031-04-26", 17"type":null, 18"spread":0.2250000000000000055511151231257827021181583404541015625 19}
ここで、困っていることは//here1
と//here2
の箇所になります。
0. //here1
について
金額の桁数が大きいのでMYSQL
上INT型
ではなくBIGINT型
を指定しているのですが、json_encode()
にかかわらず(var_dump($loans)
したとしても)、STRING型
でPHP
は出力してしまいます。これはこのような仕様で、INT型
としてJavascript
で使いたいのであれば、Javascript
側でmap()
などを利用してそれぞれのオブジェクトの該当要素について、それぞれINT型
にキャストしなければならないのでしょうか?
//here2
について
これは直接var_dump()
やecho
をすれば素直に、入力桁数で返ってくるのに、json_encode()
をすると、厳密な浮動小数点で返してこようとします。例えば$loans[0]['spread']
であれば、"spread":0.275
を返してくれればいいのですが、これも出力後、一定桁数をJavaScript
側でMath.floor()
等で一定の桁数を切らなければならないのでしょうか?。
そもそも、PHPの連想配列をJavaScriptのオブジェクト
に変換したいならjson_encode()
よりもっと良い方法がある等を含めてアドバイスを頂けますと嬉しいです。
宜しくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。