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
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));
|
|
}
|
|
} |