Conversion d'un entier en une chaîne en PHP

501

Existe-t-il un moyen de convertir un entier en une chaîne en PHP?

kman99
la source
8
PHP est vaguement tapé. Ce qui était autrefois un entier peut aussi être une chaîne, par exemple lorsque vous l' echoutilisez (utilisé dans ce que l'on appelle le contexte de chaîne ).
hakre
2
@hakre yes php est vaguement tapé et l'écho afficherait la valeur dans le contexte de la chaîne. Mais cela ne change pas le type de données d'une variable en interne. Par conséquent, strval ($ variable) est correct.
vivek_23
@Vivek: strval()ne change pas non plus en $variableinterne.
2015
2
Je voulais dire $ variable = strval ($ variable);
vivek_23

Réponses:

781

Vous pouvez utiliser la strval()fonction pour convertir un nombre en chaîne.

Du point de vue de la maintenance, il est évident ce que vous essayez de faire plutôt que certaines des autres réponses plus ésotériques. Bien sûr, cela dépend de votre contexte.

$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
la source
2
Bon point. J'ai ajouté quelques fonctions mysql_escape_string pour le nettoyer.
Chris Thompson
6
modifié depuis mysql_escape_string est déconseillé car il ignore charset.
Kzqai
7
@Kzqai pour quiconque regarde cet exemple pour essayer d'éviter les attaques par injection, je dirais abandonner vos tentatives pour échapper aux chaînes et utiliser des instructions préparées
chacham15
22
Après 5 ans, j'ai finalement supprimé l'exemple SQL car il n'était pas nécessaire de répondre à la question et j'ai introduit la confusion.
Chris Thompson
3
Attention!! Si vous passez certains nombres, php les arrondira lors de la conversion en chaîne: strval(0.999999997)retourne 1.
danielson317
86

Il y a plusieurs façons de procéder.

Deux exemples:

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

Voir le manuel PHP sur les jonglages de types pour en savoir plus.

Sanjay Sheth
la source
25
@Jazzerus Si $ var est égal à 0 (zéro), cela devient une chaîne vide. Problématique.
Simon Forsberg
5
La conversion 0en ""n'est peut-être pas mauvaise; cela dépend vraiment de l'application. Cela dit, vous faites valoir un bon argument.
WNRosenberg
2
$ f = 0; echo "$ f"; fonctionne bien avec moi, le zéro reste toujours nul. Je considère donc "$ var" comme une réponse intelligente / utile. L'exécution de 9999999 boucles (chaîne) prend 0,4046459 ... sec tandis que "$ var" prend 0,3725229 ... aucune différence.
Melsi
45
$foo = 5;

$foo = $foo . "";

Maintenant, $fooc'est une chaîne.

Mais, vous voudrez peut-être vous habituer au casting. Comme le casting est la bonne façon d'accomplir quelque chose de ce genre:

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

Une autre façon consiste à encapsuler entre guillemets:

$foo = 5;
$foo = "$foo"
Sev
la source
Tellement incroyablement étrange que nous en avons tous deux choisi 5. De plus, + est java.
karim79
Je pense que vous mélangez votre syntaxe de concaténation entre les langues là-bas.
jason
6
Je pencherais pour le casting, simplement parce que cela rend vos intentions très claires. Le casting n'a qu'un et un seul but: changer de type. Les autres exemples peuvent presque ressembler à des erreurs, dans certains contextes.
Frank Farmer
Travaillé pour moi .. thnx beaucoup
zeetit
10

Il existe plusieurs façons de "convertir" un entier en une chaîne en PHP.

La méthode informatique traditionnelle serait de convertir la variable en chaîne:

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

Vous pouvez également profiter de la conversion de type implicite de PHP et de l'interpolation de chaînes:

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

Enfin, similaire à ce qui précède, toute fonction qui accepte et renvoie une chaîne peut être utilisée pour convertir et entier. Considérer ce qui suit:

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

Je ne recommanderais pas l'option finale, mais j'ai vu du code dans la nature qui reposait sur ce comportement, alors j'ai pensé le transmettre.

Alan Storm
la source
9

Toutes ces réponses sont excellentes, mais elles vous renvoient toutes une chaîne vide si la valeur est zéro.

Essayez ce qui suit:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Microprocesseur Cat
la source
2
Notez que la question dit spécifiquement «convertir un entier», pas un flottant. :)
Microprocesseur Cat
1
Corrigez l'erreur, s'il vous plaît. La forme correcte doit être: $ s = (chaîne) $ v? (chaîne) $ v: "0";
nintyfan
7

Utilisation:

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

Ou cela pourrait être:

$string = (string)$intValue;

Ou:

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

Il existe de nombreuses façons de conversion possibles:

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

Vous pouvez soit utiliser l'opérateur point et y concaténer une chaîne (et il sera converti en chaîne):

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

Ou, plus correctement, vous pouvez simplement taper cast l'entier en une chaîne:

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

Comme les réponses ici le démontrent bien, oui, il y a plusieurs façons. Cependant, en PHP, vous avez rarement besoin de le faire. La «manière dogmatique» d'écrire PHP est de s'appuyer sur le système de frappe lâche du langage, qui contraindra le type de manière transparente selon les besoins. Pour les valeurs entières, cela est généralement sans problème. Vous devez cependant être très prudent avec les valeurs à virgule flottante.

troelskn
la source
Je ne pense pas que PHP contraindra un entier à la chaîne tout le temps. Il le fera pour strlen(12345);mais pas pour $x = 12345; echo $x[2];Toutes ces fonctions de casting sont très utiles et beaucoup de programmeurs vérifient de plus en plus leurs types.
Elzo Valugi
0

Vous pouvez simplement utiliser ce qui suit:

$intVal = 5;
$strVal = trim($intVal);
Imam
la source
0

Je dirais que cela dépend du contexte. strval () ou l'opérateur de transtypage (chaîne) peuvent être utilisés. Cependant, dans la plupart des cas, PHP décidera de ce qui est bon pour vous si, par exemple, vous l'utilisez avec echo ou printf ...

Une petite remarque: die () a besoin d'une chaîne et ne montrera aucun int :)

merkuro
la source
"dans la plupart des cas, PHP décidera de ce qui est bon pour vous" incroyable
:,
0
$amount = 2351.25;
$str_amount = "2351.25";

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

L'écho sera donc une chaîne de retour .

Kaushik shrimali
la source
Re " chaîne ": littéralement ou le type? Ou autre chose? Pouvez-vous être plus clair (en modifiant votre réponse )?
Peter Mortensen
Merci pour le commentaire @ Peter Mortensen. Le type de retour "STRING" signifie que votre valeur doit être convertie en chaîne dans une nouvelle variable. c'est pourquoi j'ai édité la chaîne
Kaushik shrimali
-4
$integer = 93;
$stringedInt = $integer.'';

est plus rapide que

$integer = 93;
$stringedInt = $integer."";
Arthur Kushman
la source
$ foo = 5; $ foo = "$ foo" extrêmement encombrant pour la mémoire en utilisation PHP ''.
Arthur Kushman