Konvertieren einer Ganzzahl in eine Zeichenfolge in PHP

501

Gibt es eine Möglichkeit, eine Ganzzahl in PHP in eine Zeichenfolge umzuwandeln?

kman99
quelle
8
PHP ist lose geschrieben. Was einmal eine Ganzzahl war, kann auch eine Zeichenfolge sein, z. B. wenn Sie echoes sind (wird im sogenannten Zeichenfolgenkontext verwendet ).
hakre
2
@hakre yes php ist lose eingegeben und das Echo würde den Wert im String-Kontext drucken. Dies ändert jedoch nicht den Datentyp einer Variablen intern. Daher ist strval ($ variable) korrekt.
vivek_23
@Vivek: strval()ändert das auch nicht $variableintern.
hakre
2
Ich meinte $ variable = strval ($ variable);
vivek_23

Antworten:

781

Mit der strval()Funktion können Sie eine Zahl in eine Zeichenfolge konvertieren.

Aus Wartungssicht ist es offensichtlich, was Sie versuchen, und nicht einige der anderen esoterischeren Antworten. Natürlich hängt es von Ihrem Kontext ab.

$var = 5;

// Inline variable parsing
echo "I'd like {$var} waffles"; // = "I'd like 5 waffles

// String concatenation 
echo "I'd like ".$var." waffles"; // I'd like 5 waffles

// Explicit cast 
$items = (string)$var; // $items === "5";

// Function call
$items = strval($var); // $items === "5";
Chris Thompson
quelle
2
Guter Punkt. Ich habe dort einige mysql_escape_string-Funktionen eingefügt, um es zu bereinigen.
Chris Thompson
6
bearbeitet, da mysql_escape_string veraltet ist, da der Zeichensatz ignoriert wird.
Kzqai
7
@ Kzqai für alle, die sich dieses Beispiel ansehen, um Injektionsangriffe zu vermeiden, würde ich sagen, geben Sie Ihre Versuche auf, Strings zu entkommen und verwenden Sie vorbereitete Anweisungen
chacham15
22
Nach 5 Jahren entfernte ich schließlich das SQL-Beispiel, da es nicht notwendig war, die Frage zu beantworten, und führte zu Verwirrung.
Chris Thompson
3
Warnung!! Wenn Sie bestimmte Zahlen übergeben, rundet php diese bei der Konvertierung in string: strval(0.999999997)return 1.
Danielson317
86

Es gibt viele Möglichkeiten, dies zu tun.

Zwei Beispiele:

 $str = (string) $int;
 $str = "$int";     

Weitere Informationen finden Sie im PHP-Handbuch zum Jonglieren von Typen .

Sanjay Sheth
quelle
25
@Jazzerus Wenn $ var gleich 0 (Null) ist, wird dies eine leere Zeichenfolge. Problematisch.
Simon Forsberg
5
Das Konvertieren 0in ist ""möglicherweise nicht schlecht. es hängt wirklich von der Anwendung ab. Das heißt, Sie machen einen guten Punkt.
WNRosenberg
2
$ f = 0; Echo "$ f"; funktioniert gut bei mir, die Null bleibt immer noch Null. Daher betrachte ich "$ var" als eine intelligente / nützliche Antwort. Das Ausführen von 9999999-Schleifen (Zeichenfolge) dauert 0,4046459 ... Sek., Während "$ var" 0,3725229 dauert ... kein Unterschied.
Melsi
45
$foo = 5;

$foo = $foo . "";

Jetzt $fooist eine Zeichenfolge.

Aber vielleicht möchten Sie sich an das Casting gewöhnen. Da Casting der richtige Weg ist, um so etwas zu erreichen:

$foo = 5;
$foo = (string)$foo;

Eine andere Möglichkeit besteht darin, in Anführungszeichen zu setzen:

$foo = 5;
$foo = "$foo"
Sev
quelle
So unglaublich seltsam, dass wir beide 5 ausgewählt haben. Außerdem ist + Java.
Karim79
Ich denke, Sie verwechseln dort Ihre Verkettungssyntax zwischen den Sprachen.
Jason
6
Ich würde mich zum Casting neigen, einfach weil es Ihre Absichten deutlich macht. Casting hat nur einen Zweck: den Typ zu ändern. Die anderen Beispiele können in einigen Zusammenhängen fast wie Fehler aussehen.
Frank Farmer
Arbeitete für mich .. danke viel
zeetit
10

Es gibt verschiedene Möglichkeiten, eine Ganzzahl in PHP in eine Zeichenfolge zu "konvertieren".

Die traditionelle Art der Informatik wäre, die Variable als Zeichenfolge zu konvertieren:

$int = 5;
$int_as_string = (string) $int;
echo $int . ' is a '. gettype($int) . "\n";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Sie können auch die implizite Typkonvertierung und Zeichenfolgeninterpolation von PHP nutzen:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = "$int";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

$string_int = $int.'';
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Schließlich kann ähnlich wie oben jede Funktion, die eine Zeichenfolge akzeptiert und zurückgibt, zum Konvertieren und zur Ganzzahl verwendet werden. Folgendes berücksichtigen:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = trim($int);
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Ich würde die letzte Option nicht empfehlen, aber ich habe Code in freier Wildbahn gesehen, der sich auf dieses Verhalten stützte, und dachte, ich würde ihn weitergeben.

Alan Storm
quelle
9

Alle diese Antworten sind großartig, aber sie alle geben Ihnen eine leere Zeichenfolge zurück, wenn der Wert Null ist.

Versuche Folgendes:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Mikroprozessor Kat.-Nr.
quelle
2
Beachten Sie, dass in der Frage speziell "Konvertieren einer Ganzzahl" und nicht "Float" steht. :)
Mikroprozessor Cat
1
Korrigieren Sie bitte den Fehler. Die richtige Form sollte sein: $ s = (string) $ v? (Zeichenfolge) $ v: "0";
Nintyfan
7

Verwenden:

$intValue = 1;
$string = sprintf('%d', $intValue);

Oder es könnte sein:

$string = (string)$intValue;

Oder:

settype(&$intValue, 'string');
gewel
quelle
4

Es gibt viele mögliche Konvertierungsmöglichkeiten:

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123
Usersbs
quelle
4

Sie können entweder den Punktoperator verwenden und eine Zeichenfolge damit verketten (und sie wird in eine Zeichenfolge umgewandelt):

$integer = 93;
$stringedInt = $integer . "";

Oder genauer gesagt, Sie können einfach die Ganzzahl in eine Zeichenfolge umwandeln:

$integer = 93;
$stringedInt = (string) $integer;
Andrew Dunkman
quelle
0

Wie die Antworten hier gut zeigen, gibt es mehrere Möglichkeiten. In PHP müssen Sie dies jedoch selten tun. Die "dogmatische Art", PHP zu schreiben, besteht darin, sich auf das lose Schreibsystem der Sprache zu verlassen, das den Typ nach Bedarf transparent erzwingt. Bei ganzzahligen Werten ist dies normalerweise problemlos möglich. Sie sollten jedoch sehr vorsichtig mit Gleitkommawerten sein.

troelskn
quelle
Ich glaube nicht, dass PHP eine ganze Zahl zwingen wird, ständig Zeichenfolgen zu setzen. Es wird es tun, strlen(12345);aber nicht für $x = 12345; echo $x[2];Alle diese Casting-Funktionen sind sehr nützlich und viele Programmierer überprüfen ihre Typen immer mehr.
Elzo Valugi
0

Sie können einfach Folgendes verwenden:

$intVal = 5;
$strVal = trim($intVal);
Imam
quelle
0

Ich würde sagen, es hängt vom Kontext ab. strval () oder der Casting-Operator (string) können verwendet werden. In den meisten Fällen entscheidet PHP jedoch, was für Sie gut ist, wenn Sie es beispielsweise mit echo oder printf verwenden ...

Eine kleine Anmerkung: die () benötigt einen String und zeigt kein int an :)

Merkuro
quelle
"In den meisten Fällen wird PHP entscheiden, was für Sie gut ist" erstaunlich :,)
itsjavi
0
$amount = 2351.25;
$str_amount = "2351.25";

$strCorrectAmount = "$amount";
echo gettype($strCorrectAmount);    //string

So wird das Echo sein Zeichenfolge .

Kaushik Shrimali
quelle
Re " string ": wörtlich oder der Typ? Oder etwas anderes? Können Sie es klarer machen (indem Sie Ihre Antwort bearbeiten )?
Peter Mortensen
Vielen Dank für den Kommentar @ Peter Mortensen Der Rückgabetyp "STRING" bedeutet, dass Ihr Wert als Zeichenfolge in eine neue Variable konvertiert werden sollte. Deshalb habe ich String bearbeitet
Kaushik Shrimali
-4
$integer = 93;
$stringedInt = $integer.'';

ist schneller als

$integer = 93;
$stringedInt = $integer."";
Arthur Kushman
quelle
$ foo = 5; $ foo = "$ foo" extrem tailliert für den Speicher in PHP ''.
Arthur Kushman