Funciones de manipulación de cadenas en PHP

A continuación veremos algunas funciones de manipulación de cadenas (strings) en PHP. Ten en cuenta que hay muchas más funciones disponibles en la documentación oficial de PHP, y la lista a continuación se centra en algunas de las más comunes:

Longitud y características generales

strlen()

La función strlen() en PHP se utiliza para obtener la longitud de una cadena, es decir, el número de caracteres que contiene. Esta función recibe como argumento la variable que contiene la cadena de la cual deseamos conocer su longitud.

<?php
$cadena = "¡Hola, mundo!";
$longitud = strlen($cadena);
echo "La longitud de la cadena es: $longitud";
// Salida: La longitud de la cadena es: 13
?>

empty()

La función empty() en PHP se utiliza para determinar si una variable está vacía. Una variable se considera vacía si no está definida, si su valor es null, false, 0, una cadena vacía "", o un array sin elementos. La función devuelve true si la variable está vacía y false si tiene algún valor.

<?php
$cadena = "Hola";
if (empty($cadena)) {
    echo "La cadena está vacía";
} else {
    echo "La cadena no está vacía";
}
// Salida: La cadena no está vacía
?>

isset()

La función isset() en PHP se utiliza para determinar si una variable está definida y no es null. Devuelve true si la variable existe y tiene un valor distinto de null, y false si la variable no está definida o su valor es null.

<?php
$cadena = "Hola";
if (isset($cadena)) {
    echo "La variable está definida";
} else {
    echo "La variable no está definida";
}
// Salida: La variable está definida
?>

Búsqueda y reemplazo

strpos()

La función strpos($cadena, $stringadenaBuscada) en PHP se utiliza para encontrar la posición de la primera ocurrencia de un substring dentro de una cadena. Si el substring no se encuentra, la función devuelve false. La posición se cuenta desde el principio de la cadena (por defecto) y comienza en 0 para el primer carácter. La sintaxis general de la función es la siguiente:

strpos(cadena, subcadena, posición_inicial);
  • cadena: La cadena en la que se realiza la búsqueda.
  • subcadena: La subcadena que se está buscando.
  • posición_inicial (opcional): Puede especificarse opcionalmente para indicar la posición inicial desde la cual comenzar la búsqueda. Si no se proporciona, la búsqueda comienza desde el principio de la cadena.
<?php
$cadena = "¡Hola, mundo!";
$posicion = strpos($cadena, "mundo");
if ($posicion !== false) {
    echo "La palabra 'mundo' comienza en la posición: $posicion";
} else {
    echo "La palabra 'mundo' no se encontró en la cadena";
}
// Salida: La palabra 'mundo' comienza en la posición: 7
?>

str_replace()

La función str_replace() en PHP se utiliza para reemplazar todas las ocurrencias de una subcadena con otra subcadena en una cadena dada. Esta función es útil para realizar cambios específicos en un texto, como reemplazar una palabra por otra, eliminar ciertos caracteres, o modificar partes de una cadena.

<?php
$cadena = "Hola, nombre";
$nuevaCadena = str_replace("nombre", "Juan", $cadena);
echo $nuevaCadena;
// Salida: Hola, Juan
?>

En este ejemplo, la función str_replace() toma tres argumentos:

  • La subcadena que se va a buscar («nombre»).
  • La subcadena con la cual se va a reemplazar («Juan»).
  • La cadena original en la cual se realizará el reemplazo ($cadena).

str_ireplace()

La función str_ireplace() en PHP es similar a str_replace(), pero con una diferencia clave: no distingue entre mayúsculas y minúsculas durante la búsqueda. Esto significa que las ocurrencias de la subcadena que se desea reemplazar se pueden encontrar sin importar si están en mayúsculas o minúsculas, y el reemplazo se realiza de manera insensible a la capitalización.

<?php
$cadena = "Hola, Nombre";
$nuevaCadena = str_ireplace("nombre", "Juan", $cadena);
echo $nuevaCadena;
// Salida: Hola, Juan
?>

Extracción y subcadenas

substr()

La función substr() en PHP se utiliza para extraer una parte específica de una cadena. La sintaxis de substr() es la siguiente:

substr(cadena, inicio, longitud);
  • cadena: La cadena original de la cual se extraerá la subcadena.
  • inicio: La posición desde la cual comenzar a extraer la subcadena. Puede ser un número positivo (indicando una posición desde el principio) o un número negativo (indicando una posición desde el final).
  • longitud (opcional): La longitud de la subcadena que se extraerá. Si este argumento no se proporciona, se extraerá hasta el final de la cadena.
<?php
$cadena = "¡Hola, mundo!";
$subcadena = substr($cadena, 6, 3);
echo "Subcadena: $subcadena";
// Salida: Subcadena: mundo
?>

En el ejemplo, se extrae una subcadena que comienza en la posición 6 (donde la «m» de «mundo» está en la cadena original) y tiene una longitud de 3 caracteres. La subcadena resultante es «mun», que se imprime en pantalla.

<?php
$cadena = "Programación en PHP";
$subcadena = substr($cadena, -3);
echo "Últimos 3 caracteres: $subcadena";
// Salida: Últimos 3 caracteres: PHP
?>

En este otro ejemplo, el argumento -3 indica que se debe extraer una subcadena comenzando por el tercer carácter desde el final de la cadena. Puesto que no especificamos la longitud de esta subcadena, se extraerá hasta el final obteniendo como resultado la subcadena «PHP».

mb_substr()

La función mb_substr() en PHP es similar a la función substr(), pero está diseñada para manejar de manera segura cadenas multibyte, como aquellas en caracteres UTF-8. La «mb» en mb_substr significa «multibyte». Esta función es especialmente útil cuando trabajas con caracteres que no son de un solo byte, ya que garantiza que los caracteres se manejen correctamente, evitando problemas de truncamiento o caracteres incompletos.

La sintaxis de mb_substr() es:

mb_substr(cadena, inicio, longitud, codificación);
  • cadena: La cadena original de la cual se extraerá la subcadena.
  • inicio: La posición desde la cual comenzar a extraer la subcadena. Puede ser un número positivo (indicando una posición desde el principio) o un número negativo (indicando una posición desde el final).
  • longitud (opcional): La longitud de la subcadena que se extraerá. Si este argumento no se proporciona, se extraerá hasta el final de la cadena.
  • codificación (opcional): La codificación de caracteres que se está utilizando. Si no se proporciona, se utilizará la codificación interna.
<?php
$cadena_utf8 = "¡Hola! 😊 ¿Cómo estás?";
$subcadena = mb_substr($cadena_utf8, 11, 2, 'UTF-8');
echo "Subcadena: $subcadena";
// Salida: Subcadena: 😊
?>

En este caso, la cadena original $cadena_utf8 contiene el emoji 😊. La función mb_substr() se utiliza para extraer una subcadena de longitud 2 comenzando desde la posición 11 de la cadena. La salida será «😊», que es el emoji seleccionado de la cadena original.

Mayúsculas y minúsculas

strtolower()

La función strtolower() en PHP se utiliza para convertir todos los caracteres de una cadena a minúsculas. Esto es útil cuando necesitas comparar cadenas sin tener en cuenta las diferencias de mayúsculas y minúsculas o cuando deseas normalizar el formato de texto en minúsculas.

<?php
$cadena_original = "CURSO DE PROGRAMACION EN PHP";
$cadena_minusculas = strtolower($cadena_original);
echo "En minúsculas: $cadena_minusculas";
// Salida: En minúsculas: curso de programacion en php
?>

Es importante tener en cuenta que strtolower() opera en función de la configuración de localización del servidor. En algunos casos, la conversión a minúsculas podría no ser adecuada para todos los caracteres si se utiliza una localización que no es compatible con UTF-8. Si estás trabajando por ejemplo con letras acentuadas (Á, É, Í, Ó, Ú) y deseas asegurarte de que la conversión a minúsculas se realice de manera adecuada, puedes considerar utilizar la función mb_strtolower() en lugar de strtolower().

La función mb_strtolower() es parte de la extensión multibyte (mbstring) de PHP y puede manejar adecuadamente caracteres multibyte, como las letras con tilde.

strtoupper()

La función strtoupper() se utiliza para convertir todos los caracteres de una cadena a mayúsculas.

<?php
$cadena = "Me encanta la programacion";
$cadena_mayusculas = strtoupper($cadena);
echo "En mayúsculas: $cadena_mayusculas";
// Salida: En mayúsculas: ME ENCANTA LA PROGRAMACION
?>

ucfirst()

La función ucfirst() se utiliza para convertir a mayúscula el primer carácter de una cadena.

<?php
$nombre = "andrés";
$nombre_mayuscula = ucfirst($nombre);
echo "Nombre: $nombre_mayuscula";
// Salida: Nombre: Andrés
?>

ucwords()

La función ucwords() es similar a ucfirst() pero convierte a mayúscula el primer carácter de cada palabra en una cadena.

<?php
$frase = "el arte de programar en php";
$frase_mayusculas = ucwords($frase);
echo $frase_mayusculas;
// Salida: El Arte De Programar En Php
?>

Espacios en blanco

trim()

La función trim() en PHP se utiliza para eliminar los espacios en blanco (u otros caracteres especificados) del inicio y el final de una cadena. Esto es útil para limpiar y normalizar cadenas, especialmente cuando se trabajan con entradas de usuario o datos provenientes de fuentes externas. Su sintaxis es la siguiente:

trim(cadena, caracteres);
  1. cadena: La cadena original de la cual se eliminarán los espacios en blanco.
  2. caracteres (opcional): Los caracteres específicos que se eliminarán. Si no se proporciona este argumento, se eliminarán los espacios en blanco normales (espacios, tabulaciones y saltos de línea).
<?php
$cadena_con_espacios = "   ¡Hola, mundo!   ";
$cadena_sin_espacios = trim($cadena_con_espacios);
echo $cadena_sin_espacios;
// Salida: ¡Hola, mundo!
?>

En este ejemplo, la función trim() elimina los espacios en blanco al inicio y al final de la cadena » ¡Hola, mundo! «, resultando en «¡Hola, mundo!». Como hemos comentado, también puedes utilizar trim() para eliminar los caracteres especificados como segundo argumento. Por ejemplo:

<?php
$cadena_con_puntos = "...¡Hola, mundo!...";
$cadena_sin_puntos = trim($cadena_con_puntos, '.');
echo "Cadena sin puntos: $cadena_sin_puntos";
// Salida: ¡Hola, mundo!
?>

ltrim() y rtrim()

Las funciónes ltrim() y rtrim() en PHP se utilizan para eliminar los espacios en blanco (u otros caracteres especificados) solo al inicio (izquierda) de una cadena, o al final de ella (derecha) respectivamente. Similares a trim(), ltrim() y rtrim() se utilizan para limpiar y normalizar cadenas.

<?php
$cadena_con_guiones = "---¡Hola, mundo!----";
$cadena_sin_guiones_izquierda = ltrim($cadena_con_guiones, '-');
echo $cadena_sin_guiones_izquierda;
// Salida: ¡Hola, mundo!----

$cadena_sin_guiones_derecha = rtrim($cadena_con_guiones, '-');
echo $cadena_sin_guiones_derecha ;
// Salida: ---¡Hola, mundo!
?>

Formato y presentación

printf()

La función printf() en PHP se utiliza para formatear e imprimir una cadena según un formato especificado. Su sintaxis es:

printf(formato, argumento1, argumento2, ...);
  1. formato: La cadena de formato que especifica cómo deben ser presentados los argumentos.
  2. argumento1, argumento2, …: Los valores que se insertarán en el formato.

Veamos un ejemplo:

<?php
$nombre = "Bob";
$galletas = 42;
$mensaje = "¡Hola, %s! Has comido %d galletas hoy. ¡Eso es impresionante!";

// Usando printf para imprimir la cadena formateada
printf($mensaje, $nombre, $galletas);
?>

En este caso, la cadena de formato $mensaje incluye %s para un nombre y %d para un número entero. Al utilizar printf(), los valores proporcionados ($nombre y $galletas) se insertan en los lugares correspondientes de la cadena, dando como resultado: «¡Hola, Bob! Has comido 42 galletas hoy. ¡Eso es impresionante!»

sprintf()

La función sprintf() también se utiliza para formatear una cadena, pero a diferencia de printf(), sprintf() devuelve la cadena formateada en lugar de imprimirla directamente en la salida. Puedes asignar el resultado a una variable o utilizarlo de la manera que prefieras.

<?php
$producto = "Computador";
$precio = 1200;

// Usando sprintf para obtener la cadena formateada
$cadena_formateada = sprintf("El %s cuesta $%d.", $producto, $precio);

// Imprimiendo la cadena formateada
echo $cadena_formateada;
?>

number_format()

La función number_format() en PHP se utiliza para formatear un número con separador de millar y/o separador decimal. Esto es útil para presentar números de manera más legible, especialmente en contextos financieros, carritos de compra, estadísticas, etc. Su sintaxis es:

number_format(numero, decimales, separador_millar, separador_decimal);
  1. numero: El número que se formateará.
  2. decimales (opcional): El número de decimales a mostrar. Por defecto es 0.
  3. separador_miles (opcional): El carácter utilizado como separador de miles. Por defecto es la coma (,).
  4. separador_decimal (opcional): El carácter utilizado como separador decimal. Por defecto es el punto (.).
<?php
$numero = 1234567.89;

// Usando number_format para formatear el número
$numero_formateado = number_format($numero, 2, ',', '.');
echo "Número formateado: $numero_formateado";
// Salida: Número formateado: 1.234.567,89
?>

Comparación

strcmp()

La función strcmp() en PHP se utiliza para comparar dos cadenas. Recibe como argumentos las dos cadenas ha comprar y devuelve un valor entero que indica la relación entre ambas:

  1. Devuelve 0 si las dos cadenas son idénticas.
  2. Devuelve un número negativo si la primera cadena es menor que la segunda.
  3. Devuelve un número positivo si la primera cadena es mayor que la segunda.

Cuando decimos que «la cadena 1 es menor que la cadena 2» al utilizar strcmp() en PHP, nos referimos al orden lexicográfico de las cadenas. Este orden se basa en la posición de los caracteres en la tabla ASCII o Unicode, donde cada carácter tiene un valor numérico asociado. Es decir, la comparación de cadenas se realiza carácter por carácter. Cuando se encuentra el primer par de caracteres diferentes, la función devuelve la diferencia entre sus valores numéricos en la tabla ASCII o Unicode.

<?php
$cadena1 = "Manzana";
$cadena2 = "Mango";

$resultado = strcmp($cadena1, $cadena2);

if ($resultado == 0) {
    echo "Las cadenas son idénticas.";
} elseif ($resultado < 0) {
    echo "La cadena 1 es lexicográficamente menor que la cadena 2.";
} else {
    echo "La cadena 1 es lexicográficamente mayor que la cadena 2.";
}
?>

Tal vez quieras usar strcmp() para comparar números, pero hay algunas consideraciones importantes que debes tener en cuenta. Cuando comparas números como cadenas utilizando strcmp(), la comparación se realiza a nivel de caracteres, no de valores numéricos. Esto significa que el resultado de la comparación se basa en la representación lexicográfica de los dígitos en las cadenas.

Ejemplo:

<?php
$cadena1 = "20";
$cadena2 = "100";

$resultado = strcmp($cadena1, $cadena2);

if ($resultado == 0) {
    echo "Las cadenas son idénticas.";
} elseif ($resultado < 0) {
    echo "La cadena 1 es lexicográficamente menor que la cadena 2.";
} else {
    echo "La cadena 1 es lexicográficamente mayor que la cadena 2.";
}
?>

En este ejemplo, aunque "20" y "100" son números, la comparación usando strcmp() los considerará como cadenas y determinará que "20" es lexicográficamente mayor que "100".

Si deseas comparar números de manera numérica, es preferible convertir las cadenas a números y utilizar los operadores de comparación numérica directamente:

<?php
$numero1 = 20;
$numero2 = 100;

if ($numero1 == $numero2) {
    echo "Los números son iguales.";
} elseif ($numero1 < $numero2) {
    echo "El número 1 es menor que el número 2.";
} else {
    echo "El número 1 es mayor que el número 2.";
}
?>