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