sscanf
sscanf($string, $format, $var1, $var2, …)
Odczytuje wartości z ciągu znaków według formatu – działa odwrotnie niż sprintf(). Bez dalszych parametrów zwraca tablicę odczytanych wartości. Jeśli przekażesz zmienne, zapisze w nich wartości i zwróci ich liczbę.
Parametry
- $string – przetwarzany tekst.
- $format – opis postaci tekstu: %d liczba całkowita, %f liczba dziesiętna, %s tekst do pierwszej spacji, %x liczba szesnastkowa, %c jeden znak. Liczba po znaku procentu ogranicza szerokość (%2x).
- $var1, $var2, … – opcjonalne, zmienne na odczytane wartości.
Przykłady
print_r(sscanf("30.9.2026", "%d.%d.%d")); // Array ( [0] => 30 [1] => 9 [2] => 2026 )
// wartości od razu do zmiennych
list($hours, $minutes) = sscanf("14:05", "%d:%d");
echo $hours * 60 + $minutes; // 845
// ze zmiennymi jako parametrami zwraca liczbę odczytanych wartości
$count = sscanf("12 kg", "%d %s", $amount, $unit);
echo "$count: $amount, $unit"; // 2: 12, kg
// %d daje liczbę całkowitą, nie tekst
var_dump(sscanf("007", "%d")[0]); // int(7)
// kolor z zapisu szesnastkowego
list($r, $g, $b) = sscanf("#0099ff", "#%2x%2x%2x");
echo "$r, $g, $b"; // 0, 153, 255
// %s czyta tylko do pierwszej spacji
print_r(sscanf("Jan Kowalski", "%s")); // Array ( [0] => Jan )
// reszta wiersza razem ze spacjami
list($id, $name) = sscanf("7 Zielona herbata", "%d %[^\n]");
echo $name; // Zielona herbata
// tekst, który nie pasuje do formatu – wartość to null
var_dump(sscanf("abc", "%d")[0]); // NULL
Na co uważać
- To nie jest sprawdzanie danych wejściowych. Tekst za ostatnią odczytaną wartością jest pomijany, „30.9.2026abc” przejdzie więc tak samo jak poprawna data. Postać danych sprawdź przez preg_match() ze znakami ^ i $.
- Jeśli tekst nie pasuje do formatu, nieodczytane wartości to null. Przy odczycie do zmiennych porównaj zwróconą liczbę z oczekiwaną.
- Zakresu wartości nie sprawdza – 45. dzień miesiąca zostanie odczytany bez błędu. Datę sprawdzają checkdate() albo DateTime::createFromFormat().
- %s kończy się na pierwszej spacji. Tekst ze spacjami czyta %[^\n] (wszystko do końca wiersza).
Powiązane funkcje:
sprintf()
preg_match()
explode()
fscanf()