Str pad: примеры (PHP)

Дополнение строк в PHP с помощью str_pad
Раздел: Работа со строками
str_pad(string string, int length [, string pad_string [, int pad_type]]): string

Функция str_pad в PHP

Функция str_pad используется для дополнения строки до определенной длины другой строкой. Эта функция часто применяется при форматировании вывода, например, для выравнивания чисел или текста в таблицах, генерации строк фиксированной длины или добавления префиксов/суффиксов.

Аргументы функции

Функция принимает четыре аргумента:

  1. input (string) - исходная строка, которую нужно дополнить.
  2. pad_length (int) - желаемая длина строки после дополнения. Если значение меньше или равно длине исходной строки, строка возвращается без изменений.
  3. pad_string (string, необязательный) - строка, используемая для дополнения. По умолчанию - пробел.
  4. pad_type (int, необязательный) - указывает, с какой стороны дополнять строку. Может принимать значения: STR_PAD_RIGHT (по умолчанию), STR_PAD_LEFT, STR_PAD_BOTH.

Основные примеры использования str_pad

Дополнение справа
echo str_pad('Test', 10, '-');
Test------
Дополнение слева
echo str_pad('42', 5, '0', STR_PAD_LEFT);
00042
Дополнение с обеих сторон
echo str_pad('PHP', 10, '*', STR_PAD_BOTH);
***PHP****
Использование строки из нескольких символов
echo str_pad('Hello', 14, '+-', STR_PAD_BOTH);
+-+Hello+-+

Похожие функции в PHP

Повторяет строку заданное количество раз. Используется, когда нужно просто повторить строку без учета итоговой длины.

sprintf

Функция для форматирования строк, позволяет задавать отступы и заполнители через спецификаторы формата, например, %10s. Более универсальна для сложного форматирования.

strtolower, strtoupper

Функции изменения регистра, не являются прямыми аналогами, но часто используются вместе со str_pad для форматирования.

Типичные ошибки

Отрицательная длина дополнения
echo str_pad('Test', -5, '-');
Test

Функция возвращает исходную строку без изменений, что может быть неочевидно.

Пустая строка для дополнения
echo str_pad('Hello', 10, '');
Предупреждение и возврат исходной строки.
Использование многобайтовых строк
echo str_pad('Привет', 10, '-');
Привет----

Функция не учитывает многобайтовую кодировку, длина считается в байтах, а не в символах. Для корректной работы с UTF-8 следует использовать mb_str_pad или аналоги.

Изменения в PHP 8

В PHP 8 поведение функции str pad было изменено в двух аспектах:

  1. Аргумент pad_length теперь приводится к типу int, тогда как ранее принимались нецелые числа с их преобразованием.
  2. При передаче отрицательного значения pad_length выбрасывается исключение ValueError, а не возвращается исходная строка.
echo str_pad('Test', -5, '-');
ValueError: str_pad(): Argument #2 ($pad_length) must be greater than or equal to 0

Расширенные примеры

Форматирование таблицы
Пример php
$data = [
    ['PHP', 8.2],
    ['Python', 3.11],
    ['JavaScript', 'ES2022']
];
foreach ($data as $row) {
    echo str_pad($row[0], 12) . str_pad($row[1], 10, ' ', STR_PAD_LEFT) . "\n";
}
PHP              8.2
Python          3.11
JavaScript    ES2022
Генерация строки прогресса
Пример php
$progress = 75;
$barLength = 20;
$filled = (int) ($progress / 100 * $barLength);
echo '[' . str_pad(str_repeat('=', $filled), $barLength, '-', STR_PAD_RIGHT) . ']';
[==============-----]
Дополнение с использованием различных символов
Пример php
echo str_pad('ID', 8, '0', STR_PAD_LEFT) . "\n";
echo str_pad('Secret', 12, '*', STR_PAD_BOTH);
000000ID
***Secret***
Эмуляция функции mb_str_pad
Пример php
function mb_str_pad($str, $length, $pad_string, $pad_type = STR_PAD_RIGHT) {
    $diff = strlen($str) - mb_strlen($str);
    return str_pad($str, $length + $diff, $pad_string, $pad_type);
}
echo mb_str_pad('Привет', 10, '-');
Привет----

Аналоги в других языках

Python: str.ljust, str.rjust, str.center
print('Test'.ljust(10, '-'))
print('42'.rjust(5, '0'))
print('PHP'.center(10, '*'))
Test------
00042
***PHP****
JavaScript: padStart, padEnd
console.log('Test'.padEnd(10, '-'));
console.log('42'.padStart(5, '0'));
Test------
00042
MySQL: LPAD, RPAD
SELECT LPAD('42', 5, '0'), RPAD('Test', 10, '-');
00042 | Test------

В отличие от PHP, в JavaScript нет встроенной функции для дополнения с обеих сторон.

PHP str_pad function comments

En
Str pad Pads a string to a certain length with another string