572 votes

Conversion d'un nombre entier en chaîne de caractères en PHP

Existe-t-il un moyen de convertir un nombre entier en chaîne de caractères en PHP ?

11 votes

PHP est faiblement typé. Ce qui était un entier peut aussi être une chaîne de caractères. echo il (utilisé dans ce qu'on appelle contexte de la chaîne ).

3 votes

@hakre oui, le php est faiblement typé et l'écho imprimerait la valeur dans un contexte de chaîne de caractères. Mais cela ne change pas le type de données d'une variable en interne. Par conséquent, strval($variable) est correct.

3 votes

@Vivek : strval() ne change pas le $variable en interne non plus.

889voto

Chris Thompson Points 5907

Vous pouvez utiliser le strval() pour convertir un nombre en chaîne de caractères.

Du point de vue de la maintenance, ce que vous essayez de faire est plus évident que certaines 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

// The two examples above have the same end value...
// ... And so do the two below

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

// Function call
$items = strval($var); // $items === "5";

2 votes

Bon point. J'ai ajouté quelques fonctions mysql_escape_string pour nettoyer tout ça.

6 votes

Édité depuis que mysql_escape_string est déprécié car il ignore le charset.

1 votes

Voici une version live - lien

101voto

Sanjay Sheth Points 811

Il y a plusieurs façons de le faire.

Deux exemples :

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

Voir le manuel PHP sur Types Jonglage pour plus.

27 votes

@Jazzerus Si $var est égal à 0 (zéro), cela devient une chaîne vide. Problématique.

5 votes

Convertir 0 a "" n'est peut-être pas mauvais ; cela dépend vraiment de l'application. Cela dit, vous soulevez un bon point.

3 votes

$f = 0 ; echo "$f" ; fonctionne bien pour moi, le zéro reste toujours zéro. L'exécution de 9999999 boucles (chaîne de caractères) prend 0,4046459... seconde alors que "$var" prend 0,3725229... aucune différence.

52voto

Sev Points 6532
$foo = 5;

$foo = $foo . "";

Maintenant $foo est une chaîne de caractères.

Mais, il faut s'habituer au casting. Le moulage est la meilleure façon d'accomplir quelque chose de ce genre :

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

Une autre façon est d'encapsuler entre guillemets :

$foo = 5;
$foo = "$foo"

0 votes

C'est tellement étrange que nous ayons tous les deux choisi 5. Aussi, + est java.

0 votes

Je pense que vous mélangez la syntaxe de concaténation entre les langues.

7 votes

Je pencherais pour le casting, simplement parce que cela rend vos intentions très claires. Le casting a un et un seul but : changer de type. Les autres exemples peuvent presque ressembler à des erreurs, dans certains contextes.

12voto

Alan Storm Points 82442

Il y a plusieurs façons de "convertir" un entier en chaîne de caractères en PHP.

La méthode traditionnelle en informatique consiste à convertir la variable en chaîne de caractères :

$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 tirer parti de la conversion implicite des types et de l'interpolation des chaînes de caractères de PHP :

$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, comme ci-dessus, toute fonction qui accepte et renvoie une chaîne de caractères peut être utilisée pour convertir un nombre entier. Considérons 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 la dernière option, mais j'ai vu du code dans la nature qui s'appuyait sur ce comportement, alors j'ai pensé que je devais le faire passer.

8voto

gewel Points 61

Utilisez :

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

Ou ça pourrait l'être :

$string = (string)$intValue;

Ou :

settype(&$intValue, 'string');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X