Saltar a contenido

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 y strtoupper: 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 o chop: 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 y strncasecmp: 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 a strstr, 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 a sprintf, 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.