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?


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

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 .


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"

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.


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

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');

4

Istnieje wiele możliwych sposobów konwersji:

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

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;

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.


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);

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 :)


„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 .


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

$ foo = 5; $ foo = „$ foo” wyjątkowo talia dla pamięci w użyciu PHP ''.
Arthur Kushman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.