You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.7 KiB
PHP

<?php
namespace WebSite;
/**
* Convenient class for extra multi-bytes string manipulation
*/
class MultiByte {
/**
* Multi-bytes version of {@see str_pad()}
*
* @param string $string The input string
* @param int $padLength The length of output string
* @param string $padString The padding string
* @param int $padType The padding type : STR_PAD_*
* @param string|null $encoding The encoding. Null if {@see mb_internal_encoding()}
*
* @return string The output string
*/
public static function str_pad (string $string, int $padLength, string $padString = ' ', int $padType = STR_PAD_RIGHT, ?string $encoding = null): string {
$encoding ??= mb_internal_encoding();
$stringLength = mb_strlen($string, $encoding);
$padStringLength = mb_strlen($padString, $encoding);
if ($padLength <= 0 || ($padLength - $stringLength) <= 0) {
return $string;
}
$padNumber = $padLength - $stringLength;
$padNumberLeft = 0;
$padNumberRight = 0;
switch ($padType) {
case STR_PAD_RIGHT:
$padNumberRight = $padNumber;
break;
case STR_PAD_LEFT:
$padNumberLeft = $padNumber;
break;
case STR_PAD_BOTH:
$padNumberLeft = floor($padNumber / 2);
$padNumberRight = $padNumber - $padNumberLeft;
break;
}
return str_repeat($padString, ceil($padNumberLeft / $padStringLength))
. $string
. str_repeat($padString, ceil($padNumberRight / $padStringLength));
}
}