Úvod >PHP >PHP manuál - funkce >str_increment

str_increment

str_increment($text)

Zvýší řetězec o jedna stejně jako počítadlo: poslední znak se posune na další písmeno nebo číslici a při přetečení se přenese doleva (z → aa, Az → Ba, 99 → 100). Funkce je od PHP 8.3.

Parametry

  • $text – neprázdný řetězec jen z písmen bez diakritiky a číslic.

Příklady

echo str_increment("a"); // b
echo str_increment("Az"); // Ba
echo str_increment("zz"); // aaa
echo str_increment("A9"); // B0
echo str_increment("99"); // 100
// označení sloupců jako v tabulkovém procesoru
$sloupec = "Y";
for ($i = 0; $i < 3; $i++) {
    $sloupec = str_increment($sloupec);
}
echo $sloupec; // AB
// jiné znaky než písmena bez diakritiky a číslice nejsou povolené
try {
    str_increment("a-1");
} catch (ValueError $e) {
    echo "neplatný řetězec"; // neplatný řetězec
}

Náhrada pro starší PHP

Ve verzích starších než PHP 8.3 funkce není. Následující kód ji doplní jen tam, kde chybí, v novějších verzích se použije vestavěná funkce.

if (!function_exists("str_increment")) {
    function str_increment($text) {
        if (!preg_match('~^[a-zA-Z0-9]+$~', $text)) {
            throw new InvalidArgumentException("Povolená jsou jen písmena bez diakritiky a číslice");
        }
        for ($i = strlen($text) - 1; $i >= 0; $i--) {
            $znak = $text[$i];
            if ($znak !== "z" && $znak !== "Z" && $znak !== "9") {
                $text[$i] = chr(ord($znak) + 1);
                return $text;
            }
            $text[$i] = $znak === "9" ? "0" : chr(ord($znak) - 25);
        }
        // přetečení všech znaků – přidat znak na začátek
        return ($text[0] === "0" ? "1" : $text[0]) . $text;
    }
}
echo str_increment("Az"); // Ba
echo str_increment("zz"); // aaa
echo str_increment("99"); // 100

Na co si dát pozor

  • Prázdný řetězec nebo jiné znaky než a–z, A–Z a 0–9 vyhodí ValueError. Náhrada výše vyhodí InvalidArgumentException, ValueError v PHP 7 není.
  • Číslice se zvyšují jako text: výsledek „100“ je řetězec, ne číslo.
  • Operátor ++ na řetězci dělá podobnou věc, ale řetězec z číslic převede na číslo („9“ → 10). Pro řetězce je čitelnější str_increment().

Příbuzné funkce:
str_decrement()
ord()
chr()
range()