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