wp_sprintf() WP 2.5.0

Варіант PHP – функції sprintf() від WordPress. Підтримує %l (list – список) у форматі, що передається.

Отримує форматований рядок, створений на базі зазначеного формату: дивіться опис PHP функції sprintf() .

1 раз – 0.000104 сек
(швидко) | 50000 разів – 0.30 сек
(дуже швидко) |
PHP 7.1.11, WP 4.9.7

Хуки з функції

Повертає

Строку. Текст створений на основі вказаного формату (патерну).

Використання

wp_sprintf($pattern, $args...);
$pattern
(рядок) (обов’язковий)

Рядок формату, у якому буде використано параметри $args .

%l(list – список) – новий замінник, якого немає у sprintf() . На місце цього замінника потрібно передавати масив зі значеннями, які будуть записані через кому (остання кома буде замінена на «і»).

%lзамінник пропускається через фільтр wp_sprintf_l() .

$args
(змішаний) (обов’язковий)
,… Параметри, які будуть використані у форматі
$pattern .

Приклади

0

#1 Приклад використання замінника %l

echo wp_sprintf( '%s: %l', 'Префікс', array( 'один', 'два', 'три', 'чотири' ) );
//> Префікс: один, два, три та чотири
0

#2 Ще приклади перетворень формату

$pattern = '%d мавп сидять на %s';
echo wp_sprintf ($ pattern, 5, 'дереві'); //> 5 мавп сидять на дереві

$pattern = 'На %2$s сидять %1$d мавп';
echo wp_sprintf ($ pattern, 5, 'дереві'); //> На дереві сидять 5 мавп

$pattern = 'На %2$s сидять %1$d мавп. %1$d мавп сидять на %2$s.';
echo wp_sprintf ($ pattern, 5, 'дереві'); //> На дереві сидять 5 мавп. 5 мавп сидять на дереві.

список змін

З версії 2.5.0Введено.
З версії 5.3.0Formalizated existing and already documented …$args parameter by adding it до функції signature.

Код wp_sprintf() WP 6.0.2

function wp_sprintf( $pattern, ...$args ) {
	$ len = strlen ($ pattern);
	$ start = 0;
	$result = '';
	$ arg_index = 0;
	while ($len > $start) {
		// Last character: append and break.
		if ( strlen ( $ pattern ) - 1 == $ start ) {
			$result .= substr( $pattern, -1 );
			break;
		}

		// Literal %: append and continue.
		if ( '%%' === substr( $pattern, $start, 2 ) ) {
			$start += 2;
			$result. = '%';
			continue;
		}

		// Get fragment before next %.
		$ end = strpos ($ pattern, '%', $ start + 1);
		if (false === $end) {
			$ end = $ len;
		}
		$fragment = substr($pattern, $start, $end - $start);

		// Fragment has a specifier.
		if ( '%' === $pattern[ $start ] ) {
			// Find numbered arguments or take the next one in order.
			if ( preg_match( '/^%(d+)$/', $fragment, $matches ) ) {
				$ index = $ matches [1] - 1; // 0-based array vs 1-based sprintf() arguments.
				$ arg = isset ($ args [$ index])? $args[$index]: '';
				$fragment = str_replace( "%{$matches[1]}$", '%', $fragment );
			} else {
				$ arg = isset ($ args [$ arg_index])? $args[$arg_index]: '';
				++$arg_index;
			}

			/**
			 * Filters a fragment from the pattern passed to wp_sprintf().
			 *
			 * If the fragment is unchanged, then sprintf() will be run on the fragment.
			 *
			 * @ Since 2.5.0
			 *
			 * @param string $fragment A fragment from the pattern.
			 * @param string $arg The argument.
			 */
			$_fragment = apply_filters( 'wp_sprintf', $fragment, $arg);
			if ( $_fragment != $fragment ) {
				$fragment = $_fragment;
			} else {
				$fragment = sprintf($fragment, (string) $arg);
			}
		}

		// Append to result and move to next fragment.
		$result. = $fragment;
		$start = $end;
	}

	return $result;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *