Convertir un entero a una cadena en PHP

501

¿Hay alguna manera de convertir un entero en una cadena en PHP?

kman99
fuente
8
PHP se escribe libremente. Lo que alguna vez fue un entero, también puede ser una cadena, por ejemplo, cuando lo usas echo(usado en el llamado contexto de cadena ).
Hakre
2
@hakre yes php está mal escrito y el eco imprime el valor en contexto de cadena. Pero esto no cambia el tipo de datos de una variable internamente. Por lo tanto, strval ($ variable) es correcto.
vivek_23
@Vivek: strval()tampoco cambia $variableinternamente.
Hakre
2
Quise decir $ variable = strval ($ variable);
vivek_23

Respuestas:

781

Puede usar la strval()función para convertir un número en una cadena.

Desde una perspectiva de mantenimiento, es obvio lo que está tratando de hacer en lugar de algunas de las otras respuestas más esotéricas. Por supuesto, depende de tu contexto.

$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
fuente
2
Buen punto. Agregué algunas funciones mysql_escape_string allí para limpiarlo.
Chris Thompson
66
editado ya que mysql_escape_string está en desuso porque ignora el juego de caracteres.
Kzqai
77
@Kzqai para cualquiera que vea este ejemplo para tratar de evitar ataques de inyección, diría que abandone sus intentos de escapar de las cadenas y use declaraciones preparadas
chacham15
22
Después de 5 años, finalmente eliminé el ejemplo de SQL, ya que no era necesario responder la pregunta e introduje confusión.
Chris Thompson
3
¡¡Advertencia!! Si pasa ciertos números, php los redondeará al convertirlos en cadena: strval(0.999999997)devuelve 1.
danielson317
86

Hay muchas formas de hacer esto.

Dos ejemplos:

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

Vea el Manual PHP sobre Tipos de Malabares para más información.

Sanjay Sheth
fuente
25
@Jazzerus Si $ var es igual a 0 (cero), eso se convierte en una cadena vacía. Problemático.
Simon Forsberg
55
Convertir 0a ""podría no ser malo; Realmente depende de la aplicación. Dicho esto, haces un buen punto.
WNRosenberg
2
$ f = 0; echo "$ f"; funciona bien conmigo, el cero sigue siendo cero. Así que considero "$ var" como una respuesta inteligente / útil. Ejecutar 9999999 bucles (cadena) toma 0.4046459 ... segundos mientras que "$ var" toma 0.3725229 ... no hay diferencia.
Melsi
45
$foo = 5;

$foo = $foo . "";

Ahora $fooes una cuerda.

Pero, es posible que desee acostumbrarse al casting. Como el casting es la forma correcta de lograr algo por el estilo:

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

Otra forma es encapsular entre comillas:

$foo = 5;
$foo = "$foo"
Sev
fuente
Tan increíblemente extraño que los dos elegimos 5. Además, + es Java.
karim79
Creo que estás mezclando tu sintaxis de concatenación entre idiomas allí.
jason
66
Me inclinaría hacia el lanzamiento, simplemente porque deja en claro tus intenciones. La fundición tiene un único propósito: cambiar los tipos. Los otros ejemplos pueden parecer casi errores, en algunos contextos.
Frank Farmer
Trabajó para mí ... gracias mucho
zeetit
10

Hay varias formas de "convertir" un entero en una cadena en PHP.

La forma tradicional de la informática sería convertir la variable como una cadena:

$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";

También puede aprovechar la conversión de tipo implícito de PHP y la interpolación de cadenas:

$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";

Finalmente, similar a lo anterior, cualquier función que acepte y devuelva una cadena podría usarse para convertir e integer. Considera lo siguiente:

$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";

No recomendaría la opción final, pero he visto código en la naturaleza que se basaba en este comportamiento, así que pensé en pasarlo.

Alan Storm
fuente
9

Todas estas respuestas son geniales, pero todas te devuelven una cadena vacía si el valor es cero.

Intenta lo siguiente:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Microprocesador Cat
fuente
2
Tenga en cuenta que la pregunta específicamente dice 'convertir un número entero', no un flotante. :)
Microprocesador Cat
1
Corrija el error, por favor. La forma correcta debería ser: $ s = (cadena) $ v? (cadena) $ v: "0";
nintyfan
7

Utilizar:

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

O podría ser:

$string = (string)$intValue;

O:

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

Hay muchas formas posibles de conversión:

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

Puede usar el operador de período y concatenar una cadena (y se tecleará en una cadena):

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

O, más correctamente, puede escribir cast el entero en una cadena:

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

Como las respuestas aquí demuestran muy bien, sí, hay varias formas. Sin embargo, en PHP rara vez necesitas hacer eso. La "forma dogmática" de escribir PHP es confiar en el sistema de escritura flexible del lenguaje, que coaccionará el tipo de forma transparente según sea necesario. Para valores enteros, esto suele ser sin problemas. Sin embargo, debe tener mucho cuidado con los valores de coma flotante.

troelskn
fuente
No creo que PHP obligue a un entero a encadenar todo el tiempo. Lo hará para strlen(12345);pero no para $x = 12345; echo $x[2];Todas estas funciones de conversión son bastante útiles y muchos programadores están verificando sus tipos cada vez más.
Elzo Valugi
0

Simplemente puede usar lo siguiente:

$intVal = 5;
$strVal = trim($intVal);
Imán
fuente
0

Yo diría que depende del contexto. strval () o el operador de conversión (string). Sin embargo, en la mayoría de los casos, PHP decidirá qué es bueno para usted si, por ejemplo, lo usa con echo o printf ...

Una pequeña nota: die () necesita una cadena y no mostrará ningún int :)

Merkuro
fuente
"en la mayoría de los casos, PHP decidirá qué es bueno para usted" increíble:,)
itsjavi
0
$amount = 2351.25;
$str_amount = "2351.25";

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

Entonces el eco será una cadena de retorno .

Kaushik shrimali
fuente
Re " cadena ": literalmente o el tipo? ¿O algo mas? ¿Puedes aclararlo ( editando tu respuesta )?
Peter Mortensen
Gracias por el comentario @ Peter Mortensen Ese es el tipo de retorno "STRING" significa que su valor debe convertirse como una cadena en una nueva variable. así que por eso
edité
-4
$integer = 93;
$stringedInt = $integer.'';

es más rápido que

$integer = 93;
$stringedInt = $integer."";
Arthur Kushman
fuente
$ foo = 5; $ foo = "$ foo" extremadamente cintura para la memoria en el uso de PHP ''.
Arthur Kushman