Дополнение строки до заданной длины с обоих краев в 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;
	}

}

Аргументы

  1. $string — дополняемая строка;
  2. $padLength — нужная длина строки;
  3. $padString — строка дополнения;
  4. $encoding — кодировка.

Возвращаемое значение

Возвращает строку string, дополненную до длины padLength с обоих краев.

Особенности

  • БЕЗОПАСНА для многобайтных строк.
  • Важно помнить, что при вычислении левого и правого дополнений строки в приоритете правый край. Т.е. если нужно увеличить строку на 3 символа, то к правому краю добавиться 2 символа, а к левому — 1.