# Strings en PHP
## Formateo de Cadenas
Para formatear cadenas tenemos dos funciones en PHP, estas son: **printf** y **sprintf**.
La diferencia entre ambas es que **printf** muestra la cadena formateada y **sprintf** nos permite guardar dicho formateo en una variable.
Cada especificador de conversión va precedido del carácter **%** y se compone de las siguientes partes:
- **Signo** (opcional). Indica si se pone signo a los número negativos (por defecto) o también a los positivos (se indica con un signo +
- **Relleno** (opcional). Indica que carácter se usará para ajustar el tamaño de una cadena. Las opciones son el carácter 0 o el carácter espacio (por defecto se usa el espacio). Si queremos utilizar un carácter de relleno alternativo se prefija con una comilla simple (')
- **Alineación** (opcional). Indica que tipo de alineación se usará para generar la salida: justificación derecha (por defecto) o izquierda (se indica con el carácter -).
- **Ancho** (opcional). Indica el mínimo número de caracteres de salida para un parámetro dado.
- **Precisión** (opcional). Indica el número de dígitos decimales que se mostrarán para un número real. Se escribe como un dígito precedido por un punto.
- **Tipo (obligatorio)**. Indica cómo se debe tratar el valor del parámetro correspondiente.
### Tipos
En la siguiente tabla puedes ver una lista con todos los especificadores de tipo.
| Especificador | Significado |
| -------- | -------- |
| b | Tratado como entero y representado como binario|
| c | Tratado como entero y representado como código ASCII|
| d | Tratado como entero y representado como decimal|
| u | Tratado como entero y representado como decimal sin signo|
| o | Tratado como entero y representado como octal|
| x | Tratado como entero y representado en hex (minuscula)|
| X | Tratado como entero y representado en hex (mayuscula)|
| f | Tratado como doble y representado en coma flotante (sin tener en cuenta la localidad)|
| F | Tratado como doble y representado en coma flotante (teniendo en cuenta la localidad)|
| e | Representado en notación cientifíca (e en minuscula)|
| E | Representado en notación cientifíca (e en mayuscula)|
| g | Se usa la forma más corta entre %f y %e|
| G | Se usa la forma más corta entre %FE|
| s | Tratado como una cadena y representado como tal|
| % | Se muestra el carácter % como tal|
*Ejemplos de uso*
```php=
<?php
$number_int = 25;
printf("El número %d en Binario es: %b \n", $number_int, $number_int);
printf("El número %d en Octal es: %o \n", $number_int, $number_int);
printf("El número %d en Hexadecimal es: %x \n", $number_int, $number_int);
printf("El número %d en ASCII es: %c \n", $number_int, $number_int);
setlocale(LC_ALL, "es", "esES, es.UTF8");
$number_float = 45.2345;
printf("El número con signo y dos decimales: %+.2f \n", $number_float);
printf("El número con cuatro decimales: %.4F\n", $number_float);
printf("El número como digito y con 3 9 de relleno: %'95d\n", $number_float);
printf("El número %f en notación cientfíca: %.2e \n", $number_float, $number_float);
printf("El número usando g: %g\n", $number_float);
/* OUTPUT
El número 25 en Binario es: 11001
El número 25 en Octal es: 31
El número 25 en Hexadecimal es: 19
El número 25 en ASCII es:
El número con signo y dos decimales: +45,23
El número con cuatro decimales: 45.2345
El número como digito y con 3 9 de relleno: 99945
El número 45,234500 en notación cientfíca: 4.52e+1
El número usando g: 45,2345
/
```
## Algunas Funciones
- **strrev**: Hace el reverso de una string
- **str_repeat**: Repite la cadena que le pasemos como primer parámetro, el número de veces que le indiquemos como segundo parámetro.
- **strtoupper**: Pasa una string a mayuscúlas
- **strlen**: Nos indica la longitud de una string
```php=
<?php
echo strrev(" .dlrow olleH");
echo str_repeat("Hip ", 2);
echo strtoupper("hooray!");
echo strlen("intro");
```
## Heredoc
Permite asignar cadenas de texto extensos, sin usar comillas, a
través de delimitadores. Funciona exactamente igual que las comillas dobles, podemos escapar carácteres y meter variables dentro.
La estructura es la siguiente:
```php=
<?php
// La palabra DELIMITADOR puede ser cualquiera
print <<< DELIMITADOR
texto
$var
/n
DELIMITADOR;
```
Esto es bastante útil sobre todo para generar bloques de contenido html reutilizables.
### Nowdoc
Si quieres que no se sustituyan variables debemos poner el delimitador de apertura entre comillas simples.
```php=
<?php
// La palabra DELIMITADOR puede ser cualquiera
print <<< 'DELIMITADOR'
texto
$var
/n
DELIMITADOR;
```
###### tags: `DAW` DSW` `UT2` `PHP`