Menu

Rzutowanie typów w PHP: string na int, intval() i (int)

Zamień łańcuch PHP na liczbę całkowitą przez (int) $str albo intval($str); (int) "42" daje 42, a (int) "12abc" daje 12. Poznaj rzutowanie na int, float, bool, string i array, łańcuchy liczbowe, intval z podstawą, settype i walidację danych zamiast cichego 0.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Aby zamienić wartość na inny typ, wpisz typ w nawiasach przed nią: (int) "42" daje liczbę całkowitą 42. Forma funkcyjna intval("42") robi to samo. Rzutowanie nigdy nie kończy się błędem: tekst, który nie jest liczbą, staje się 0, a łańcuch zaczynający się od cyfr zachowuje tylko te cyfry.

PHP ma rzutowania (int), (float), (string), (bool), (array) i (object). Każde ma też funkcję: intval(), floatval(), strval(), boolval().

String na int: co zwracają (int) i intval()

PHP czyta cyfry od początku łańcucha, po pominięciu wiodących białych znaków, i zatrzymuje się na pierwszym znaku, który nie pasuje do liczby. Zapis wykładniczy liczy się jako liczba, przedrostek 0x nie.

Zauważ, że "12.7" staje się 12: rzutowanie na int odcina część ułamkową, a nie zaokrągla. Ani (int), ani intval() nie wypisuje tu ostrzeżenia, niezależnie od danych.

intval() z podstawą

intval($value, $base) czyta łańcuch w innym systemie liczbowym. Z podstawą 0 PHP patrzy na przedrostek: 0x dla szesnastkowego, 0b dla binarnego, wiodące 0 dla ósemkowego.

Float na int: obcięcie, a nie zaokrąglenie

(int) odrzuca wszystko po przecinku dziesiętnym, w stronę zera. Jeśli chcesz najbliższą liczbę całkowitą, najpierw zaokrąglij i uważaj na nawiasy:

Ostatnia para to klasyczna pułapka floatów: (0.1 + 0.7) * 10 jest przechowywane jako 7.999999..., więc obcięcie daje 7. Zaokrąglenie najpierw daje 8. Strona o matematyce opisuje round, floor i ceil.

Rzutowanie na bool, string i array

Przy rzutowaniu na bool tylko kilka wartości staje się false: 0, 0.0, "", "0", null i []. Wszystko inne to true, także "0.0", " " i "false".

Przy rzutowaniu na string true staje się "1", a false i null stają się "". Floaty tracą końcowe .0, a bardzo duże lub bardzo małe floaty używają zapisu wykładniczego.

Rzutowanie tablicy na string jej nie łączy. To wypisuje Tags: Array:

<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;

a PHP dodaje ostrzeżenie:

Warning: Array to string conversion in /home/index.php on line 3

Aby zamienić tablicę w tekst, użyj implode(", ", $array) albo json_encode($array).

Wszystkie rzutowania w skrócie

Wybierz wartość, aby zobaczyć, co zwracają dla niej intval, (bool), strval, is_numeric i gettype. Każdą komórkę obliczyło PHP 8.3.

intval, (bool), strval i is_numeric dla każdej wartości $x
Point at or tap a cell to read it as PHP.
$xintvalboolstrvalis_numericgettype
"10"
"1abc"
"abc"
""
" "
"0"
"0.0"
"1e1"
"010"
1.5
true
false
null
[]
[1, 2]
Every cell computed by PHP 8.3.19.

Łańcuchy liczbowe i automatyczna konwersja

Łańcuch liczbowy to łańcuch, który wygląda jak liczba: "12", "-3.5", "1e3", z opcjonalnymi białymi znakami wokół. PHP konwertuje je automatycznie w arytmetyce, a is_numeric() mówi, czy łańcuch się kwalifikuje.

"12abc" + 1 nadal daje 13, ale PHP 8 wypisuje Warning: A non-numeric value encountered, a "abc" + 1 rzuca TypeError. Rzutuj albo waliduj przed wykonywaniem arytmetyki na danych od użytkownika.

settype() i gettype()

settype() zmienia typ zmiennej w miejscu, a gettype() go zgłasza. get_debug_type() zwraca krótsze nazwy, które widzisz w komunikatach błędów (int, float, string).

Większość kodu używa zamiast tego rzutowania ($value = (int) $value;), bo jest krótsze i czyta się tak samo.

Waliduj dane zamiast je rzutować

(int) nigdy nie odmawia, więc (int) "abc" po cichu staje się 0, a (int) "5 apples" staje się 5. Dla danych z formularza użyj filter_var z FILTER_VALIDATE_INT: zwraca liczbę całkowitą albo false.

Porównuj wynik przez === false, bo 0 to poprawna liczba całkowita, a == false by ją odrzuciło. Strona o filter_var pokazuje zakresy i inne walidatory.

Najczęściej zadawane pytania

Jak zamienić łańcuch na int w PHP?

Użyj (int) $str albo intval($str); dla podstawy 10 oba dają ten sam wynik. (int) "42" daje 42, (int) "12abc" daje 12, a (int) "abc" daje 0. Aby odrzucić dane, które nie są liczbą całkowitą, użyj filter_var($str, FILTER_VALIDATE_INT), które zamiast zgadywać zwraca false.

Czym różni się intval() od (int) w PHP?

Dla podstawy 10 zwracają ten sam wynik. intval() przyjmuje też podstawę: intval('ff', 16) daje 255, a z podstawą 0 czyta przedrostki takie jak 0x, 0b i wiodące 0 dla systemu ósemkowego. Jako funkcję intval można też przekazać jako callback, na przykład w array_map('intval', $values).

Co zwraca (bool) "0" w PHP?

false. Łańcuch "0" to jedna z wartości fałszywych w PHP, obok "", 0, 0.0, null i []. Każdy inny łańcuch to true, także "0.0", " " i "false".

Jak zamienić liczbę na łańcuch w PHP?

Użyj (string) $n, strval($n) albo wstaw ją w łańcuch: "$n". (string) 3.0 daje "3"; dla stałej liczby miejsc po przecinku użyj number_format($n, 2) albo sprintf('%.2f', $n).

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ