WP_SPRINTF() │ WP 2.5.0
Функция WordPress для форматирования строк на основе PHP функции sprintf()
с возможностью использования фильтров.
Быстрая информация
- Время выполнения один раз: 0.000104 сек (быстро)
- Время выполнения 50000 раз: 0.30 сек (очень быстро)
- PHP версия: 7.1.11
- WordPress версия: 4.9.7
Хуки функции
wp_sprintf
Возвращаемое значение
Функция возвращает отформатированную строку.
Использование
wp_sprintf( $pattern, ...$args );
Параметры
$pattern
(string) (обязательный) — строка, в которую будут подставляться отформатированные аргументы....$args
(mixed) (обязательный) — аргументы, которые будут отформатированы в строку$pattern
.
Примеры
Пример 1: Замена строк
echo wp_sprintf( '%s: %l', 'Prefix', [ 'one', 'two', 'three', 'four' ] );
// Вывод: Prefix: one, two, three and four
Пример 2: Дополнительные примеры форматирований
$pattern = '%d monkeys are sitting on the %s';
echo wp_sprintf( $pattern, 5, 'tree' );
// Выв��д: 5 monkeys are sitting on the tree
$pattern = 'There are %1$d monkeys sitting on the %2$s';
echo wp_sprintf( $pattern, 5, 'tree' );
// Вывод: There are 5 monkeys on the tree
$pattern = 'There are %1$d monkeys sitting on the %2$s. %1$d monkeys are sitting on the %2$s';
echo wp_sprintf( $pattern, 5, 'tree' );
// Вывод: There are 5 monkeys on the tree. There are 5 monkeys on the tree.
Изменения
- С версии 2.5.0 — Функция была введена.
- С версии 5.3.0 — Параметр
...$args
был формализован и добавлен в сигнатуру функции.
Код функции
Функция wp_sprintf
реализует логику форматирования строки:
function wp_sprintf( $pattern, ...$args ) {
$len = strlen( $pattern );
$start = 0;
$result = '';
$arg_index = 0;
while ( $len > $start ) {
// Если последний символ: добавляем и выходим.
if ( strlen( $pattern ) - 1 === $start ) {
$result .= substr( $pattern, -1 );
break;
}
// Литерал %: добавляем и продолжаем.
if ( '%%' === substr( $pattern, $start, 2 ) ) {
$start += 2;
$result .= '%';
continue;
}
// Получаем фрагмент перед следующим %.
$end = strpos( $pattern, '%', $start + 1 );
if ( false === $end ) {
$end = $len;
}
$fragment = substr( $pattern, $start, $end - $start );
// Если фрагмент имеет спецификатор.
if ( '%' === $pattern[ $start ] ) {
// Находим номер аргумента или берем следующий по порядку.
if ( preg_match( '/^%(d+)$/', $fragment, $matches ) ) {
$index = $matches[1] - 1; // Индекс массива с нуля, а аргументы sprintf() — с единицы.
$arg = isset( $args[ $index ] ) ? $args[ $index ] : '';
$fragment = str_replace( "%{$matches[1]}$", '%', $fragment );
} else {
$arg = isset( $args[ $arg_index ] ) ? $args[ $arg_index ] : '';
++$arg_index;
}
/**
* Фильтрует фрагмент из шаблона, переданного в wp_sprintf().
*
* Если фрагмент не изменен, то будет выполнена функция sprintf() для фрагмента.
*
* @since 2.5.0
*
* @param string $fragment фрагмент из шаблона.
* @param string $arg аргумент.
*/
$_fragment = apply_filters( 'wp_sprintf', $fragment, $arg );
if ( $_fragment !== $fragment ) {
$fragment = $_fragment;
} else {
$fragment = sprintf( $fragment, (string) $arg );
}
}
// Добавляем к результату и переходим к следующему фрагменту.
$result .= $fragment;
$start = $end;
}
return $result;
}
Связанные функции
WordPress содержит множество связанных функций, которые могут быть полезны при работе с массивами и строками. Некоторые из них:
array_is_list()
array_key_first()
is_countable()
str_contains()
wp_basename()
wp_generate_uuid4()
Эти функции облегчают работу с данными и помогают улучшить код с точки зрения удобс��ва и эффективности.
Используйте wp_sprintf
для адаптации строк в вашем коде WordPress, что сделает ваши сообщения и выводы более гибкими и понятными для пользователей.