質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2582閲覧

URLに値(float)を入れ、その値を取得すると少数点以下が表示されない

Sky_Hat

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/05 03:48

URLの最後のパラメータにfloat(少数)を入れ、その値を取得すると小数点以下が表示されません。
値の使用目的は、バージョンの値をもらって表示切替の判断基準として使う予定です。

1.1->Aページ
1.2->Bページ
といったことをやろうとしております。

--やりたい事--
・小数点以下も表示されるようにしたいです。
└URLの最後に「/」を入れた場合、小数点以下も表示されることは知っておりますが、他の方法も無いかを知りたいです。
・値がstringで返ってくるので、floatで返すようにしたいです。

これらは、phpの仕様なのでしょうか?

開発環境
・Windows10
・PHP
・FuelPHP

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

明確な答えになっていないかもしれませんが・・・
getで値を送るとき、一つ一つパラメーターにして書き連ねるよりも、
serializeで配列を文字列に固めてしまうと楽です。
暗号化したい場合も楽になるので、お勧めです。

<?php $array_test = array( 'boolean_type' => true, 'int_type' => 123456, 'float_type' => 1.234, 'date_type' => date("Y/m/d", strtotime("2017/1/1")), 'string_type' => 'abcd', 'array_type' => array( 'aa' => 1, 'bb' => 2, 'cc' => 3, 'dd' => 4), ); var_dump($array_test); $seri = serialize($array_test); print_r($seri); $reseri = unserialize($seri); var_dump($reseri);

結果

array(6) { ["boolean_type"]=> bool(true) ["int_type"]=> int(123456) ["float_type"]=> float(1.234) ["date_type"]=> string(10) "2017/01/01" ["string_type"]=> string(4) "abcd" ["array_type"]=> array(4) { ["aa"]=> int(1) ["bb"]=> int(2) ["cc"]=> int(3) ["dd"]=> int(4) } } a:6:{s:12:"boolean_type";b:1;s:8:"int_type";i:123456;s:9:"float_type";d:1.234;s:9:"date_type";s:10:"2017/01/01";s:11:"string_type";s:4:"abcd";s:10:"array_type";a:4:{s:2:"aa";i:1;s:2:"bb";i:2;s:2:"cc";i:3;s:2:"dd";i:4;}} array(6) { ["boolean_type"]=> bool(true) ["int_type"]=> int(123456) ["float_type"]=> float(1.234) ["date_type"]=> string(10) "2017/01/01" ["string_type"]=> string(4) "abcd" ["array_type"]=> array(4) { ["aa"]=> int(1) ["bb"]=> int(2) ["cc"]=> int(3) ["dd"]=> int(4) } }

日付が文字列なのはお約束です。

投稿2017/04/05 04:29

raichi

総合スコア278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sky_Hat

2017/04/05 05:39 編集

ご回答、ありがとうございます。 大変、申し訳ありません。 自分の説明が不足しておりました。 値は、アプリ側から送られてきます。 ですので、PHP→PHPへの値の受け渡しは考えておりませんでした。 これを使用することを考えますと、少し時間が掛かってしまいます... ただ、大変参考になります! serializeで固めてしまえば、扱いは楽になりそうですね。
guest

0

ベストアンサー

FuelPHPは触ったことがないため、Fuel独自の仕様なのかもしれませんが。
手元のPHP7環境で試してみたところ、問題なく取得できました。

PHP

1<?php 2$float = $_GET['float']; 3var_dump($float); 4$float2 = (float)$float; 5var_dump($float2); 6$float3 = 1*$float; 7var_dump($float3); 8?>

上記のようなコードを作成し、http://example.com/?float=3.141592 にアクセスした結果

string(8) "3.141592" float(3.141592) float(3.141592)

となりました。
型キャストでも暗黙的キャストでもどちらも機能しているようです

投稿2017/04/05 04:14

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sky_Hat

2017/04/05 04:52 編集

ご回答、ありがとうございます。 FuelPHPのGET(Input::get)を使用しております。 例 URL) http://test/~/~/1.0 何も対応をしない状態で取得しますと、 string(1)"1" 上記の形になります。 例 URL) http://test/~/~/1.0/ 最後に「/」を付けますと、 string(3)"1.0" 上記の形になります。 後ろに「/」を入れる必要があるのは、FuelPHP独自のものなのかもしれませんね。 ただ、URL自体が文字列なので値を取ってきたら、 数字もstringになるのは仕方ないことのようですね。 floatが欲しいのなら、型キャストするしか方法はないようですね。
退会済みユーザー

退会済みユーザー

2017/04/05 08:28

最後にスラッシュを付けるつけないで挙動が変わる話は、 Router::get()の実装に関係するのかなぁと察します。 (嘘だったらごめんなさい、自信ないので) 正規表現で区切ってしまう際に、まずはスラッシュで区切っているのを抽出した後、 末尾は単語で切り出す(\w+って正規表現)でピリオド以降を捨てているんじゃないかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問