Дополнение строки до заданной длины с обоих краев в PHP
Стандартная функция str_pad() с константой STR_PAD_BOTH
В PHP нет отдельной функции для данной задачи, но есть общая функция дополнения строки — str_pad(). В 4-й аргумент этой функции нужно передать константу STR_PAD_BOTH. Однако данная функция НЕБЕЗОПАСНА для многобайтных строк, нужно использовать альтернативную реализацию.
Альтернативная функция str_pad() с константой STR_PAD_BOTH
Исходный код
class StringExtension {
/**
* @param string $string
* @param int $padLength
* @param string $padString
* @param string $encoding
* @return string
*/
public static function padBoth($string, $padLength, $padString = ' ', $encoding = null) {
$string = (string) $string;
$padLength = (int) $padLength;
$padString = (string) $padString;
$encoding = ($encoding === null) ? mb_internal_encoding() : (string) $encoding;
if ($padLength && ($padStringLength = mb_strlen($padString, $encoding))) {
$padLength -= mb_strlen($string, $encoding);
if ($padLength > 0) {
$padLengthLeft = floor($padLength / 2);
$padLengthRight = $padLength - $padLengthLeft;
$string = mb_substr(str_repeat($padString, ceil($padLengthLeft / $padStringLength)), 0, $padLengthLeft, $encoding) . $string;
$string .= mb_substr(str_repeat($padString, ceil($padLengthRight / $padStringLength)), 0, $padLengthRight, $encoding);
}
}
return $string;
}
}
Аргументы
- $string — дополняемая строка;
- $padLength — нужная длина строки;
- $padString — строка дополнения;
- $encoding — кодировка.
Возвращаемое значение
Возвращает строку string, дополненную до длины padLength с обоих краев.
Особенности
- БЕЗОПАСНА для многобайтных строк.
- Важно помнить, что при вычислении левого и правого дополнений строки в приоритете правый край. Т.е. если нужно увеличить строку на 3 символа, то к правому краю добавиться 2 символа, а к левому — 1.