Strings¶
Ya hemos visto que en PHP, las cadenas de texto se pueden definir utilizando comillas simples (''
) o comillas dobles (""
):
- Las comillas simples no interpretan el contenido de la cadena.
- Las comillas dobles interpretan el contenido, incluyendo secuencias de escape como
\n
,\t
,\$
, y permiten incluir variables dentro de la cadena.
<?php
$nombre = "Ginés";
$moneda = "euro";
echo "Me llamo $nombre"; // Interpreta la variable $nombre
echo "Son 30 {$moneda}s"; // Interpreta la variable $moneda
?>
Acceso a caracteres de una cadena
Las cadenas en PHP se pueden manipular como si fueran arrays, permitiendo el acceso a caracteres individuales usando índices
<?php
$cadena = "Yo soy Batman";
$ygriega = $cadena[0]; // 'Y'
?>
Formateo de cadenas con printf
y sprintf
Además de echo
, PHP permite mostrar cadenas formateadas con la función printf
, heredada del lenguaje C. Esta función permite formatear distintos tipos de datos.
printf
: muestra el resultado formateado.sprintf
: devuelve el resultado formateado como cadena.
<?php
$num = 33;
$nombre = "Larry Bird";
// %d -> número decimal, %s -> string
printf("%s llevaba el número %d", $nombre, $num);
$frase = sprintf("%s llevaba el número %d", $nombre, $num);
echo $frase;
?>
Más ejemplos y detalles los podéis consultar en: w3schools.com
Operaciones básicas¶
PHP incluye diversas funciones útiles para trabajar con cadenas. A continuación, algunas de las más importantes:
strlen
: obtiene la longitud de una cadena y devuelve un número entero.substr
: extrae una subcadena.str_replace
: reemplaza una subcadena dentro de una cadena.strtolower
ystrtoupper
: convierte una cadena a minúsculas o mayúsculas, respectivamente.
<?php
$cadena = "El caballero oscuro";
$tam = strlen($cadena);
echo "La longitud de '$cadena' es: $tam <br />";
$oscuro = substr($cadena, 13); // desde posición 13 al final
$caba = substr($cadena, 3, 4); // desde posición 3, 4 letras
$katman = str_replace("c", "k", $cadena); // reemplaza 'c' por 'k'
echo "$oscuro $caba ahora es $katman";
echo "Grande ".strtoupper($cadena); // convierte a mayúsculas
?>
Manipulación de caracteres ASCII¶
Las siguientes funciones trabajan con caracteres ASCII:
chr
: devuelve el carácter correspondiente a un código ASCII.ord
: devuelve el código ASCII de un carácter.
<?php
function despues(string $letra): string {
$asciiLetra = ord($letra);
return chr($asciiLetra + 1);
}
echo despues("B"); // C
?>
Limpieza y ajuste de cadenas¶
Si necesitas limpiar espacios en una cadena, PHP ofrece las siguientes funciones:
trim
: elimina espacios en blanco al principio y al final.ltrim
/rtrim
ochop
: elimina espacios solo al principio o al final, respectivamente.tr_pad
: rellena una cadena hasta una longitud especificada.
<?php
$cadena = " Programando en PHP ";
$limpia = trim($cadena); // "Programando en PHP"
$sucia = str_pad($limpia, 23, "."); // "Programando en PHP....."
?>
Comparación de cadenas¶
Para comparar cadenas, PHP proporciona varios métodos, dependiendo de si se desea una comparación estricta o flexible:
==
: comparación con conversión de tipos.===
: comparación estricta, sin conversión de tipos.strcmp
: compara dos cadenas lexicográficamente.strcasecmp
: compara cadenas sin distinguir entre mayúsculas y minúsculas.strncmp
ystrncasecmp
: compara los primeros N caracteres.strnatcmp
: comparación "natural" (útil para comparar cadenas como "Alfa10" y "Alfa2").
<?php
$frase1 = "Alfa";
$frase2 = "Alfa";
$frase3 = "Beta";
$frase4 = "Alfa5";
$frase5 = "Alfa10";
var_dump($frase1 == $frase2); // true
var_dump($frase1 === $frase2); // true
var_dump(strcmp($frase1, $frase2)); // 0
var_dump(strncmp($frase1, $frase5, 3)); // 0
var_dump($frase2 < $frase3); // true
var_dump(strcmp($frase2, $frase3)); // -1
var_dump($frase4 < $frase5); // false
var_dump(strcmp($frase4, $frase5)); // 4 → f4 > f5
var_dump(strnatcmp($frase4, $frase5)); // -1 → f4 < f5
?>
Búsqueda dentro de cadenas¶
Para buscar subcadenas o posiciones dentro de cadenas, se pueden usar las siguientes funciones:
strpos
/strrpos
: devuelve la posición de la primera/última ocurrencia de una subcadena.strstr
/strchr
: devuelve la subcadena desde la primera ocurrencia de una subcadena.stristr
: similar astrstr
, pero sin distinguir entre mayúsculas y minúsculas.
<?php
$frase = "Quien busca encuentra, eso dicen, a veces";
$pos1 = strpos($frase, ","); // encuentra la primera coma
$pos2 = strrpos($frase, ","); // encuentra la última coma
$trasComa = strstr($frase, ","); // ", eso dicen, a veces"
?>
Validación de contenido en cadenas¶
Si necesitas comprobar el contenido de una cadena, las funciones ctype devuelven un valor booleano:
ctype_alpha
: comprueba si solo contiene letras.ctype_alnum
: comprueba si contiene letras o números.ctype_digit
: comprueba si solo contiene dígitos.ctype_punct
: comprueba si contiene caracteres de puntuación (sin espacios).ctype_space
: comprueba si son espacios, tabuladores o saltos de línea.
<?php
$prueba1 = "hola";
$prueba2 = "hola33";
$prueba3 = "33";
$prueba4 = ",.()[]";
$prueba5 = " ,.()[]";
echo ctype_alpha($prueba1)."<br>"; // true
echo ctype_alnum($prueba2)."<br>"; // true
echo ctype_digit($prueba3)."<br>"; // true
echo ctype_punct($prueba4)."<br>"; // true
echo ctype_space($prueba5)."<br>"; // false
echo ctype_space($prueba5[0])."<br>"; // true
?>
Trabajando con subcadenas¶
Para dividir y unir cadenas en PHP:
explode
: convierte una cadena en un array usando un separador.implode
/join
: convierte un array en una cadena usando un separador.str_split
/chunk_split
: divide una cadena en partes de un número fijo de caracteres.
<?php
$frase = "Quien busca encuentra, eso dicen, a veces";
$partes = explode(",", $frase);
$ciudades = ["Elche", "Orihuela", "Alicante"];
$cadenaCiudades = implode(">", $ciudades);
$partes3cadena = chunk_split($frase, 3);
// "Qui
// en
// bus
// ca
// ..."
$partes3array = str_split($frase, 3);
// ["Qui", "en ", "bus", "ca ", "enc", …]
?>
Más funciones con cadenas
Si queremos trabajar con tokens:
strtok(cadena, separador)
- y dentro del bucle:
strtok(separador)
Finalmente, para separarla en base al formato:
sscanf
: Contraria asprintf
, crea un array a partir de la cadena y el patrón.
Finalmente, otras operaciones que podemos realizar para trabajar con subcadenas son:
substr_count
: cuenta el número de veces que aparece una subcadena.substr_replace
: reemplaza parte de una cadena a partir de una posición dada.
<?php
$batman = "Bruce Wayne es Batman";
$empresa = substr($batman, 6, 5); // "Wayne"
$bes = substr_count($batman, "B"); // 2
// Reemplaza "Batman" por "camarero"
$camarero1 = substr_replace($batman, "camarero", 15);
$camarero2 = substr_replace($batman, "camarero", -6); // Desde el final
// Reemplaza "Bruce Wayne" por "Bruno"
$bruno = substr_replace($batman, "Bruno", 0, 11);
?>
Codificación de HTML y URLs¶
PHP también proporciona funciones para trabajar con la codificación de caracteres especiales, útil en aplicaciones web:
htmlentities
: convierte caracteres especiales en sus equivalentes HTML.htmlspecialchars
: convierte caracteres especiales como&
,"
,'
,<
,>
.strip_tags
: elimina etiquetas HTML.nl2br
: onvierte saltos de línea en etiquetas<br />
.rawurlencode
/rawurldecode
: codifica/decodifica una URL.
Estas funciones las utilizaremos en la unidad 4.- Programación Web.
Actividad¶
AC 222. (RA3 / CE3b CE3d / IC1 / 3p) Realiza una recfactorización de la PR 216 para formatear el texto, quitar espacios en blanco y mostrar solo los primeros 15 caracteres de cada producto.