2012-07-24 6 views

Respuesta

37

con caracteres printf o sprintf precedidos por el signo% son marcadores de posición (o tokens). Serán reemplazados por una variable pasada como argumento.

Ejemplo:

$str1 = 'best'; 
$str2 = 'world'; 

$say = sprintf('Tivie is the %s in the %s!', $str1, $str2); 
echo $say; 

Esta es la salida:

Tivie es el mejor del mundo!

Nota: Hay más marcadores de posición (% s para cadenas,% d para el número dec, etc ...)


Orden:

El orden en el que se pasa los argumentos cuentan Si cambia $ str1 con $ str2 como

$say = sprintf('Tivie is the %s in the %s!', $str2, $str1); 

se imprimirá

"Tivie es el mundo en el mejor!"

Puede, sin embargo, cambiar el orden de lectura de los argumentos de la siguiente manera:

$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1); 

que imprimirá la oración correctamente.


Además, tenga en cuenta que PHP es un lenguaje dinámico y no requiere (o admite) la definición explícita de tipos. Eso significa que hace malabares con los tipos de variables según sea necesario. En sprint, significa que si pasas una "cadena" como argumento para un marcador de posición de número (% d), esa cadena se convertirá en un número (int, float ...) que puede tener resultados extraños. He aquí un ejemplo:

$onevar = 2; 
$anothervar = 'pocket'; 
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar); 
echo $say; 

esto imprimirá

tengo 2 del chocolate (s) en mi 0.

Más lectura en PHPdocs

+0

Creo que su ejemplo junto con la explicación de Ned hacen una respuesta bastante sólida. Pregunta: si escribo 'sprintf ('Tivie es el% s en% s!', $ Str2, $ str2);', se repetirá "' Tivie es el mejor en el mundo! '"? –

+1

saldrá "Tivie es el mundo en el mundo" desde str2 = world, – Tivie

+0

Hooray para los errores tipográficos. Me reí de eso. Entonces '% strn' devuelve el valor de'% s [n] ', por así decirlo? Con esa misma notación, '% s% s' devuelve los valores de'% s [0]% s [1] '? –

9

En printf, %s es un marcador de posición para los datos que se insertan en la cadena. Los argumentos adicionales a printf son los valores que se insertarán. Se asocian con los marcadores de posición posicionalmente: el primer marcador de posición obtiene el primer valor, el segundo el segundo valor, y así sucesivamente.

+1

'+ 1' - BTW , el término correcto para esto es la interpolación de cadenas. –

+0

La misma sintaxis que C 'printf', al parecer. –

1
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 

Saldrá la salida: "Hay 5 monos en el árbol".

+1

Gracias por la edición, Ned. Tuve cuatro ediciones, y todavía no funcionó. Markdown debe haber cometido un error por un segundo. – David

+0

Esta es una muy buena respuesta que merece más atención. –

+0

Directamente del manual php :) –

3

%s es un especificador de tipo que se reemplazará al valor de valor (cadena) en el caso de %s.

Además %s se pueden utilizar otros specifiers, más populares son a continuación:

d - el argumento es tratado como un entero y presentado como un número decimal (firmado).

f - el argumento se trata como un flotante y se presenta como un número de punto flotante (configuración localizada).

s - el argumento se trata como y se presenta como una cadena.