web-dev-qa-db-ja.com

PHPで文字列を数値に変換するにはどうすればいいですか?

これらのタイプの値、'3''2.34''0.234343'などを数値に変換したいです。 JavaScriptではNumber()を使用できますが、PHPで利用可能な同様の方法はありますか?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545
535
Sara

PHPはほとんどの状況であなたに代わって型を強制するので、通常これを行う必要はありません。明示的に型を変換したい場合は、 をキャスト してください。

$num = "3.14";
$int = (int)$num;
$float = (float)$num;
823
deceze

その方法はいくつかあります。

  1. 文字列を数値プリミティブデータ型にキャストします。

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. 文字列に対して数学演算を実行します。

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. intval() または floatval() を使用します。

    $num = intval("10");
    $num = floatval("10.1");
    
  4. settype() を使用してください。

135
fardjad

どんな(ゆるくタイプされた)言語でも、あなたはそれにゼロを加えることによっていつでも文字列を数にキャストすることができます。

ただし、PHPはこの変数を使用するときに自動的に実行され、出力時にとにかく文字列にキャストされるため、これにはほとんど意味がありません。

浮動小数点数にキャストした後は、浮動小数点数の性質上、予測不能に変更される可能性があるため、ドット付き数字を文字列として保持することをお勧めします。

45

問題を避けるために intval($var) を試してください。いくつかの例:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34 (octal as starts with zero)
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26 (hex as starts with 0x)
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>
40
gopeca

あなたが使用することができます:

(int)(your value);

またはあなたが使用することができます:

intval(string)
22
noobie-php

$value = '0.4'にfloatを取得したいが、$value = '4'にintを取得したい場合は、次のように書くことができます。

$number = ($value == (int) $value) ? (int) $value : (float) $value;

少し汚れていますが、動作します。

17

例えば(int)_value_を使うことができます。

$string = '100';
$int = (int)$string;

Type Juggling を参照してください。

14
Elbert Labasano

PHP では、文字列を数値に変換するためにintval(string) or floatval(string)関数を使うことができます。

12
Kashif Khan

stringintに変換するかfloatに変換するかを選択する代わりに、単に0を追加するだけで、PHPが自動的に結果を数値型に変換します。

// Being sure the string is actually a number
if (is_numeric($string))
    $number = $string + 0;
else // Let the number be 0 if the string is not a number
    $number = 0;
12
webNeat

あなたはいつでもそれにゼロを加えることができます!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)
12
Boykodev

いくつかのケースで有用でより安全であることができる答えへのほんの少しのメモ。最初に文字列に実際に有効な数値が含まれているかどうかを確認し、それを数値型に変換します(たとえば、intを文字列に変換するdbからのデータを操作する必要がある場合など)。 is_numeric()を使用してからfloatval()を使用できます。

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type
10
taseenb

これはあなたが探しているものを達成する機能です。まず、値が数値として理解できるかどうかをチェックし、そうであれば、それをintとfloatに変換します。 intとfloatが同じ場合(例えば5 == 5.0)、int値を返します。 intとfloatが同じでない場合(例えば5!= 5.3)、floatの精度が必要であると仮定してその値を返します。値が数値ではない場合、警告をスローしてnullを返します。

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}
9

これは私が自分自身のために物事を単純化するために書いた関数です:

また、boolean、integer、double、realの短縮形も返します。

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

ParseNumericをtrueに設定してtypeを呼び出すと、typeをチェックする前に数値文字列が変換されます。

したがって:

type( "5"、true)はintを返します

type( "3.7"、true)はfloatを返します

type( "500")は文字列を返します

これは一種の誤ったチェック方法であり、実際の変数は依然として文字列なので、注意してください。必要に応じて、実際の変数を正しい型に変換する必要があります。データベースがアイテムIDまたはエイリアスをロードするかどうかを確認するために必要なだけです。実行時に文字列として解析されるため、予期しない影響はありません。

編集

オブジェクトが関数であるかどうかを検出したいのであれば、このケースをスイッチに追加してください。

case 'object': return is_callable($mixed)?'function':'object';
6
Dieter Gribnitz

Boykodevの答え に加えて、私はこれを提案します。

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)
6
drugan
    $num = "3.14";
    $int = (int)$num; // Output = 3
    $float = (float)$num; // Output = 3.14
    $double = (double)$num; // Output = 3.14

キャストを使用してPHP内の文字列を数値に変換できます。

6
Sandun Harshana

JavaScriptでは、文字列を数値に変換する簡単な方法は1を掛けることです。 "+"記号はJavaScriptでは複数の用途に使用されますが、 "*"記号は純粋に純粋です。数学的な乗算のために。

ここで私がPHPを数字として含む文字列を自動的に解釈しても構わないと思っていたこと(および追加についてのコメントはPHPでは "+"は純粋に数学的な加算のために、この乗算トリックはPHPにもうまく働きます。

私はそれをテストしました、そしてそれはうまくいきます...あなたが文字列をどのように取得したかによりますが、1を掛ける前に、それにtrim()関数を適用したいかもしれません。

6

そうです、PHPにも似たような方法がありますが、ほとんど知られていないので、それについてはほとんど聞かれません。ここに記述されているように、それは "identity"と呼ばれる算術演算子です。

Aritmetic Operators

数値文字列を数値に変換するには、次のようにします。

$a = +$a;
6
aldemarcalazans

単にあなたはこのように書くことができます:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>
5

文字列をint型に変換するには、 intval() 関数を使用するだけです。

5
Codemaker
$a = "10";

$b = (int)$a;

これを使用して、 PHP で文字列をintに変換できます。

4
Pritom

このようなものを使ってみてください。

<?php
    $string = '5'; // The $ string is a variable to hold string '5'
    $int = intval($string); // $int is the converted string to integer $int = intval('5');
    echo $int; // 5
?>
4
Nikhil Jaitak

あなたが使用することができます:

((int) $var)   ( but in big number it return 2147483647 :-) )

しかし、最善の解決策は次のものを使うことです。

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

または

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;
4
Mehdi Ajdari

あなたの特定のケースでは、PHPで文字列を数字に変換するために1を掛けることができます。 PHPは、浮動小数点と整数を自動的に処理します。

$num = "2.12";
var_dump(is_float($num)); // bool(false)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(true)

$num = $num*1;
var_dump(is_float($num)); // bool(true)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(false)
3
Haktan Suren

PHPは制限内でそれを行います

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>
2
Adrian Cornish

次のようにデータ型を変更できます

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

歴史的な理由から、floatの場合は "double"が返されます。

PHPドキュメント

2
David Lozano

すべての提案は数値型を失います。

これは私にはベストプラクティスのようです。

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}
2
Rocco Galasso

プログラミングインタビューの中で、「PHPで整数を文字列にキャストするための組み込み関数を書いていたとしたら、その関数をどのように書くのか」という質問がありました。これが解決策です。

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);
0
Brendan

やり方がある:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

variableは:stringなので、is_*を使用してもうまくいきません。

json_encode()とそれに続くjson_decode()の組み合わせを使って、それは "真の"形式に変換されます。もしそれが本当のstringなら、それは間違って出力するでしょう。

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

出力します:string(2) "Me" int(0) float(0)

0
Anuga

私は答えを読み続けてきましたが、誰もがPHPの数値変換における最大の警告に言及しているのを見ませんでした。

最も支持されている答えは以下の通りです。

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

そりゃ素晴らしい。 PHPは直接キャストを行います。しかし、次のようにしたらどうなりますか?

$str = "3.14is_trash"
$intstr = (int)$str

PHPはそのような変換が有効であると見なしますか?

どうやらはい

PHPは、必要な型の最初の数字以外の文字が見つかるまで文字列を読み取ります。整数の場合、数字は[0-9]です。その結果、3が[0-9]の文字範囲内にあるため、読み続けます。 .を読み取り、[0-9]の範囲にないためそこで停止します。

Floatまたはdoubleにキャストした場合も同様です。 PHPは3、次に.、次に1、そして4の順に読み取ります。有効なfloat数値ではないのでiで停止します。

その結果、"million" >= 1000000はfalseと評価されますが、"1000000million" >= 1000000trueと評価されます。

また見なさい:

https://www.php.net/manual/en/language.operators.comparison.php 比較中の変換方法

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion 文字列のしくみそれぞれの数値に変換

0
Dragas