Symfony\Polyfill\Mbstring

Mbstring::mb_str_pad │ public static │ CF7 1.0

Метод класса: Mbstring{}

Хуков нет.

Возвращает

string|false.

Использование

$result = Mbstring::mb_str_pad( $string, $length, $pad_string, $pad_type, ?string $encoding );
$string(строка) (обязательный)
.
$length(int) (обязательный)
.
$pad_string(строка)
.
По умолчанию: ' '
$pad_type(int)
.
По умолчанию: \STR_PAD_RIGHT
?string $encoding
.
По умолчанию: null

Код Mbstring::mb_str_pad() CF7 6.2.4.1

public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, ?string $encoding = null)
{
    if (null === $encoding) {
        $encoding = self::mb_internal_encoding();
    } elseif (!self::assertEncoding($encoding, 'mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given')) {
        return false;
    }

    if (0 >= $padStringLength = self::mb_strlen($pad_string, $encoding)) {
        if (\PHP_VERSION_ID < 80000) {
            trigger_error('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', \E_USER_WARNING);

            return false;
        }

        throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
    }

    if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
        if (\PHP_VERSION_ID < 80000) {
            trigger_error('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', \E_USER_WARNING);

            return false;
        }

        throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
    }

    $paddingRequired = $length - self::mb_strlen($string, $encoding);

    if ($paddingRequired < 1) {
        return $string;
    }

    switch ($pad_type) {
        case \STR_PAD_LEFT:
            $leftPaddingLength = $paddingRequired;
            break;
        case \STR_PAD_RIGHT:
            $leftPaddingLength = 0;
            break;
        default:
            $leftPaddingLength = intdiv($paddingRequired, 2);
    }

    $rightPaddingLength = $paddingRequired - $leftPaddingLength;

    return str_repeat($pad_string, intdiv($leftPaddingLength, $padStringLength)).self::mb_substr($pad_string, 0, $leftPaddingLength % $padStringLength, $encoding)
        .$string
        .str_repeat($pad_string, intdiv($rightPaddingLength, $padStringLength)).self::mb_substr($pad_string, 0, $rightPaddingLength % $padStringLength, $encoding);
}