Konwersja liczby całkowitej na ciąg znaków w PHP

501

Czy istnieje sposób na konwersję liczby całkowitej na ciąg znaków w PHP?

kman99
źródło
8
PHP jest luźno wpisane. To, co było kiedyś liczbą całkowitą, może również być łańcuchem, np. Kiedy Ty echo(używane w tak zwanym kontekście łańcucha ).
hakre
2
@hakre tak php jest luźno wpisany, a echo wypisuje wartość w kontekście łańcucha. Ale to nie zmienia wewnętrznie typu danych zmiennej. Stąd strval ($ zmienna) jest poprawny.
vivek_23,
@Vivek: strval()nie zmienia też $variablewewnętrznie.
hakre
2
Miałem na myśli $ zmienna = strval ($ zmienna);
vivek_23,

Odpowiedzi:

781

Możesz użyć tej strval()funkcji do konwersji liczby na ciąg.

Z punktu widzenia konserwacji oczywiste jest, co próbujesz zrobić, a nie inne, bardziej ezoteryczne odpowiedzi. Oczywiście zależy to od kontekstu.

$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
źródło
2
Słuszna uwaga. Wrzuciłem tam kilka funkcji mysql_escape_string, aby go wyczyścić.
Chris Thompson
6
edytowane, ponieważ mysql_escape_string jest przestarzałe, ponieważ ignoruje zestaw znaków.
Kzqai,
7
@Kzqai dla każdego, kto patrzy na ten przykład, aby uniknąć ataków polegających na wstrzyknięciu, powiedziałbym, że należy porzucić próby ucieczki przed ciągami i użyć przygotowanych instrukcji
chacham15
22
Po 5 latach w końcu usunąłem przykład SQL, ponieważ nie było potrzeby odpowiadać na pytanie i wprowadziłem zamieszanie.
Chris Thompson,
3
Ostrzeżenie!! Jeśli podasz określone liczby, php zaokrągli je podczas konwersji na string: strval(0.999999997)zwraca 1.
danielson317,
86

Można to zrobić na wiele sposobów.

Dwa przykłady:

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

Więcej informacji znajduje się w podręczniku PHP na temat żonglowania typami .

Sanjay Sheth
źródło
25
@Jazzerus Jeśli $ var jest równe 0 (zero), staje się pustym ciągiem. Problematyczny.
Simon Forsberg,
5
Konwersja 0na ""może nie być zła; to naprawdę zależy od aplikacji. To powiedziawszy, masz rację.
WNRosenberg
2
$ f = 0; echo „$ f”; działa dobrze ze mną, zero pozostaje nadal zero. Uważam więc, że „$ var” jest mądrą / przydatną odpowiedzią. Uruchomienie 9999999 pętli (ciąg) zajmuje 0,4046459 ... s, podczas gdy „$ var” zajmuje 0,3725229 ... bez różnicy.
Melsi
45
$foo = 5;

$foo = $foo . "";

Teraz $foojest ciąg.

Ale możesz przyzwyczaić się do castingu. Ponieważ casting jest właściwym sposobem na osiągnięcie czegoś takiego:

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

Innym sposobem jest umieszczenie w cudzysłowie:

$foo = 5;
$foo = "$foo"
Sev
źródło
Tak niesamowicie dziwne, że oboje wybraliśmy 5. + to także java.
karim79
Myślę, że mieszasz tam swoją składnię konkatenacji między językami.
jason
6
Skłoniłbym się do rzucenia, po prostu dlatego, że to wyraźnie wyjaśnia twoje intencje. Przesyłanie ma jeden i tylko jeden cel: zmianę typów. Inne przykłady mogą w niektórych kontekstach wyglądać jak błędy.
Frank Farmer
Pracowałem dla mnie .. bardzo dużo
zeetit
10

Istnieje wiele sposobów „konwersji” liczby całkowitej na ciąg znaków w PHP.

Tradycyjnym sposobem informatyki byłoby rzutowanie zmiennej jako ciąg znaków:

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

Możesz także skorzystać z niejawnej konwersji typu i interpolacji ciągów 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";

Wreszcie, podobnie jak powyżej, dowolna funkcja, która akceptuje i zwraca ciąg znaków, może być użyta do konwersji i liczby całkowitej. Rozważ następujące:

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

Nie poleciłbym tej ostatniej opcji, ale widziałem na dziko kod, który polegał na tym zachowaniu, więc pomyślałem, że przekażę go dalej.

Alan Storm
źródło
9

Wszystkie te odpowiedzi są świetne, ale wszystkie zwracają ci pusty ciąg znaków, jeśli wartość wynosi zero.

Spróbuj wykonać następujące czynności:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Mikroprocesor Cat
źródło
2
Zauważ, że pytanie wyraźnie mówi „konwersja liczby całkowitej”, a nie liczby zmiennoprzecinkowe. :)
Mikroprocesor Cat
1
Proszę poprawić błąd. Prawidłowa forma powinna brzmieć: $ s = (ciąg) $ v? (ciąg) $ v: "0";
nintyfan
7

Posługiwać się:

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

Lub może to być:

$string = (string)$intValue;

Lub:

settype(&$intValue, 'string');
gewel
źródło
4

Istnieje wiele możliwych sposobów konwersji:

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123
Usersbs
źródło
4

Możesz użyć operatora kropki i połączyć z nim ciąg (i zostanie on rzutowany na ciąg):

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

Lub, mówiąc dokładniej, możesz po prostu rzucić liczbę całkowitą na ciąg:

$integer = 93;
$stringedInt = (string) $integer;
Andrew Dunkman
źródło
0

Jak tu dobrze pokazują odpowiedzi, tak, istnieje kilka sposobów. Jednak w PHP rzadko trzeba to robić. „Dogmatycznym sposobem” pisania PHP jest poleganie na luźnym systemie pisania w języku, który w razie potrzeby przejrzyście wymusza ten typ. W przypadku wartości całkowitych jest to zwykle bezproblemowe. Powinieneś jednak bardzo uważać na wartości zmiennoprzecinkowe.

troelskn
źródło
Nie sądzę, aby PHP przez cały czas wymuszało zapisanie liczby całkowitej. Będzie to robić, strlen(12345);ale nie w przypadku $x = 12345; echo $x[2];Wszystkie te funkcje rzutowania są dość przydatne, a wielu programistów coraz częściej sprawdza ich typy.
Elzo Valugi,
0

Możesz po prostu użyć następujących opcji:

$intVal = 5;
$strVal = trim($intVal);
Imam
źródło
0

Powiedziałbym, że to zależy od kontekstu. można użyć strval () lub operatora rzutowania (string). Jednak w większości przypadków PHP zdecyduje, co jest dla Ciebie dobre, jeśli na przykład użyjesz go z echo lub printf ...

Jedna mała uwaga: die () potrzebuje łańcucha i nie pokaże żadnej int :)

merkuro
źródło
„w większości przypadków PHP zdecyduje, co jest dla ciebie dobre” niesamowite
:,
0
$amount = 2351.25;
$str_amount = "2351.25";

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

Więc echo będzie powrót ciąg .

Kaushik shrimali
źródło
Re „ string ”: dosłownie czy typ? Albo coś innego? Czy możesz to wyjaśnić ( edytując odpowiedź )?
Peter Mortensen
Dzięki za komentarz @ Peter Mortensen To jest typ zwracany „STRING” oznacza, że ​​twoja wartość powinna zostać przekonwertowana jako ciąg znaków w nowej zmiennej. dlatego właśnie edytowałem ciąg
Kaushik shrimali
-4
$integer = 93;
$stringedInt = $integer.'';

jest szybszy niż

$integer = 93;
$stringedInt = $integer."";
Arthur Kushman
źródło
$ foo = 5; $ foo = „$ foo” wyjątkowo talia dla pamięci w użyciu PHP ''.
Arthur Kushman