it-swarm.com.de

Wie konvertiere ich einen String in eine Zahl in PHP?

Ich möchte diese Arten von Werten, '3', '2.34', '0.234343' usw., in eine Zahl konvertieren. In JavaScript können wir Number() verwenden, aber gibt es eine ähnliche Methode in PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545
563
Sara

Dies ist normalerweise nicht erforderlich, da PHP in den meisten Fällen den Typ für Sie erzwingt. In Situationen, in denen Sie den Typ explizit konvertieren möchten, cast ​​ :

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

Es gibt verschiedene Möglichkeiten, dies zu tun:

  1. Wandeln Sie die Zeichenfolgen in numerische primitive Datentypen um:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. Führen Sie mathematische Operationen für die Zeichenfolgen aus:

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. Verwenden Sie intval() oder floatval() :

    $num = intval("10");
    $num = floatval("10.1");
    
  4. Verwenden Sie settype() .

146
fardjad

In jeder (lose geschriebenen) Sprache können Sie eine Zeichenfolge immer in eine Zahl umwandeln, indem Sie eine Null hinzufügen.

Dies hat jedoch wenig Sinn, da PHP dies zum Zeitpunkt der Verwendung dieser Variablen automatisch tut und es zum Zeitpunkt der Ausgabe sowieso in einen String umgewandelt wird.

Beachten Sie, dass Sie möglicherweise gepunktete Zahlen als Zeichenfolgen beibehalten möchten, da diese nach dem Umsetzen in float aufgrund der Art der float-Zahlen möglicherweise unvorhersehbar geändert werden.

45

Um Probleme zu vermeiden, versuchen Sie intval($var) . Einige Beispiele:

<?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
?>
42
gopeca

Sie können verwenden:

(int)(your value);

Oder Sie können verwenden:

intval(string)
22
noobie-php

Wenn Sie ein float für $value = '0.4', aber int für $value = '4' erhalten möchten, können Sie schreiben:

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

Es ist ein bisschen schmutzig, aber es funktioniert.

20

Sie können zum Beispiel (int)_value_ verwenden.

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

Siehe Typ Jonglieren .

14
Elbert Labasano

Sie können jederzeit eine Null hinzufügen!

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

Anstatt zu wählen, ob string in int oder float konvertiert werden soll, können Sie einfach einen 0 hinzufügen, und PHP wird automatisch Konvertieren Sie das Ergebnis in einen numerischen Typ.

// 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;
13
webNeat

In PHP können Sie intval(string) or floatval(string) Funktionen verwenden, um Zeichenfolgen in Zahlen umzuwandeln.

12
Kashif Khan

Nur eine kleine Anmerkung zu den Antworten, die in manchen Fällen nützlich und sicherer sein können. Möglicherweise möchten Sie zuerst überprüfen, ob die Zeichenfolge tatsächlich einen gültigen numerischen Wert enthält, und ihn dann in einen numerischen Typ konvertieren (z. B., wenn Sie Daten aus einer Datenbank bearbeiten müssen, die Ints in Zeichenfolgen konvertiert). Sie können is_numeric() und dann floatval() verwenden:

$a = "whatever"; // any variable

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

Ja, es gibt eine ähnliche Methode in PHP, aber es ist so wenig bekannt, dass Sie selten davon hören werden. Es ist ein arithmetischer Operator namens " identity ", wie hier beschrieben:

Aritmetische Operatoren

Gehen Sie wie folgt vor, um eine numerische Zeichenfolge in eine Zahl umzuwandeln:

$a = +$a;
9
aldemarcalazans

Hier ist die Funktion, die das erreicht, wonach Sie suchen. Zuerst prüfen wir, ob der Wert als Zahl verstanden werden kann und wandeln ihn dann in ein int und ein float um. Wenn int und float identisch sind (z. B. 5 == 5,0), geben wir den int-Wert zurück. Wenn int und float nicht identisch sind (z. B. 5! = 5,3), gehen wir davon aus, dass Sie die Genauigkeit des float benötigen und diesen Wert zurückgeben. Wenn der Wert nicht numerisch ist, geben wir eine Warnung aus und geben null zurück.

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

Hier ist eine Funktion, die ich geschrieben habe, um die Dinge für mich selbst zu vereinfachen:

Es gibt auch Kurzversionen von Boolean, Integer, Double und Real zurück.

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;
    }
}

Wenn Sie type mit parseNumeric auf true setzen, werden numerische Zeichenfolgen konvertiert, bevor Sie type überprüfen.

Somit:

typ ("5", true) gibt int zurück

typ ("3.7", true) gibt float zurück

type ("500") gibt einen String zurück

Seien Sie vorsichtig, da dies eine Art falsche Überprüfungsmethode ist und Ihre tatsächliche Variable weiterhin eine Zeichenfolge ist. Sie müssen die tatsächliche Variable bei Bedarf in den richtigen Typ konvertieren. Ich brauchte es nur, um zu überprüfen, ob die Datenbank eine Element-ID oder einen Alias ​​laden sollte, was keine unerwarteten Auswirkungen hat, da es sowieso zur Laufzeit als Zeichenfolge analysiert wird.

Bearbeiten

Wenn Sie feststellen möchten, ob Objekte Funktionen sind, fügen Sie diesen Fall zum Schalter hinzu:

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

Zusätzlich zu Boykodevs Antwort schlage ich Folgendes vor:

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

Sie können eine Zeichenfolge in eine Zahl in PHP mithilfe einer Besetzung konvertieren.

6
Sandun Harshana

Ich habe festgestellt, dass in JavaScript eine einfache Möglichkeit zum Konvertieren eines Strings in eine Zahl darin besteht, ihn mit 1 zu multiplizieren. Dies behebt das Verkettungsproblem, da das "+" - Symbol in JavaScript mehrfach verwendet wird, während das "*" - Symbol rein ist zur mathematischen Multiplikation.

Basierend auf dem, was ich hier in Bezug auf PHP gesehen habe, der automatisch bereit ist, eine ziffernhaltige Zeichenfolge als Zahl zu interpretieren (und den Kommentaren zum Hinzufügen, da in PHP das "+" steht rein rechnerisch) funktioniert dieser Multiplikationstrick auch für PHP.

Ich habe es getestet und es funktioniert ... Abhängig davon, wie Sie die Zeichenfolge erhalten haben, möchten Sie möglicherweise die trim () - Funktion anwenden, bevor Sie mit 1 multiplizieren.

6

Sie können einfach so schreiben:

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

Sie können einfach die Funktion intval() verwenden, um eine Zeichenfolge in eine Ganzzahl umzuwandeln.

5
Codemaker
$a = "10";

$b = (int)$a;

Sie können dies verwenden, um einen String in ein int in PHP umzuwandeln.

4
Pritom

Versuchen Sie es mit so etwas:

<?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

Sie können verwenden:

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

Die beste Lösung ist jedoch:

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

Oder

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

Für Ihren speziellen Fall können Sie einfach mit 1 multiplizieren, um die Zeichenfolge in PHP in eine Zahl umzuwandeln. PHP kümmert sich automatisch um Floating und Integer.

$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 wird es für Sie in Grenzen tun

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

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

Sie können den Datentyp wie folgt ändern

$number = "1.234";

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

settype($number , "float");

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

Aus historischen Gründen wird im Falle eines Floats "double" zurückgegeben.

PHP-Dokumentation

2
David Lozano

Alle Vorschläge verlieren den numerischen Typ.

Dies scheint mir eine bewährte Methode zu sein:

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

Da ist ein Weg:

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

Die Verwendung von is_* funktioniert nicht, da variable ein: string ist.

Mit der Kombination von json_encode() und dann json_decode() wird es in seine "wahre" Form umgewandelt. Wenn es ein wahres string ist, würde es falsch ausgeben.

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

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

Gibt aus: string(2) "Me" int(0) float(0)

1
Anuga

Ich habe die Frage "Angenommen, Sie schreiben die eingebaute Funktion zum Umwandeln einer Ganzzahl in einen String in PHP, wie würden Sie diese Funktion schreiben" in einem Programmierinterview. Hier ist eine Lösung.

$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

Ich habe die Antworten durchgelesen und nicht gesehen, dass jemand die größte Einschränkung bei der PHP-Zahlenkonvertierung erwähnt hat.

Die am besten bewertete Antwort schlägt Folgendes vor:

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

Das ist hervorragend. PHP führt direktes Casting durch. Aber was ist, wenn wir Folgendes tun?

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

Betrachtet PHP solche Konvertierungen als gültig?

Anscheinend ja .

PHP liest den String, bis es das erste nicht numerische Zeichen für den gewünschten Typ findet. Dies bedeutet, dass für Ganzzahlen numerische Zeichen [0-9] sind. Infolgedessen liest es 3, da es sich im Zeichenbereich von [0-9] befindet, und fährt mit dem Lesen fort. Liest . und stoppt dort, da es nicht im [0-9] Bereich liegt.

Dasselbe würde passieren, wenn Sie schweben oder sich verdoppeln würden. PHP würde 3, dann ., dann 1, dann 4 lesen und bei i anhalten, da es kein gültiges float ist numerisches Zeichen.

Infolgedessen wird "million" >= 1000000 als falsch ausgewertet, "1000000million" >= 1000000 jedoch als true.

Siehe auch:

https://www.php.net/manual/en/language.operators.comparison.php wie Konvertierungen beim Vergleichen durchgeführt werden

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion wie Zeichenfolgen in entsprechende Zahlen konvertiert werden

0
Dragas