Saltar al contenido principal

Funciones predefinidas

El lenguaje PHP ofrece un abanico de funciones ya definidas, agrupadas por su funcionalidad.

Cadenas

Ya hemos visto que se pueden crear con comillas simples ('', sin interpretación) o comillas dobles ("", interpretan el contenido y las secuencias de escape \n, \t, \$, {, … - magic quotes)

<?php
"Me llamo $nombre"
"Son 30 {$moneda}s"
?>

Se acceden a los caracteres como si fuera un array.

<?php
$cadena = “Yo soy Batman”;
$ygriega = $cadena[0];
?>

Además de echo, podemos mostrar las cadenas mediante la función printf. Esta función viene heredada del lenguaje C, y en la cadena se indica el tipo de dato a formatear y genera una salida formateada. Si quiero guardar el resultado en una variable, podemos utilizar sprintf.

<?php
$num = 33;
$nombre = "Larry Bird";
printf("%s llevaba el número %d", $nombre, $num); // %d -> número decimal, %s -> string
$frase = sprintf("%s llevaba el número %d", $nombre, $num);
echo $frase
?>

Tienes muchos más ejemplos en https://www.w3schools.com/php/func_string_printf.asp

Operaciones básicas

Todas las funciones se pueden consultar en https://www.php.net/manual/es/ref.strings.php

Las más importantes son:

  • strlen: obtiene la longitud de una cadena y devuelve un número entero
  • substr: devuelve una subcadena de la cadena original
  • str_replace: reemplaza caracteres en una cadena
  • strtolower y strtoupper: Transforman una cadena de caracteres en la misma cadena en 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 13 al final
$caba = substr($cadena, 3, 4); // desde 3, 4 letras
$katman = str_replace("c", "k", $cadena);
echo "$oscuro $caba ahora es $katman";

echo "Grande ".strtoupper($cadena);
?>

Si queremos trabajar con caracteres ASCII de forma individual, son útiles las funciones:

  • chr: obtiene el carácter a partir de un ASCII
  • ord: obtiene el ASCII de un carácter
<?php
function despues(string $letra): string {
$asciiLetra = ord($letra);
return chr($asciiLetra + 1);
}

echo despues("B");
?>

Si queremos limpiar cadenas, tenemos las funciones:

  • trim: elimina los espacios al principio y al final
  • ltrim / rtrim o chop: Elimina los espacios iniciales / finales de una cadena.
  • str_pad: rellena la cadenas hasta una longitud especificada y con el carácter o caracteres especificados.
<?php
$cadena = " Programando en PHP ";
$limpia = trim($cadena); // "Programando en PHP"

$sucia = str_pad($limpia, 23, "."); // "Programando en PHP....."
?>

Comparando y buscando

La comparación de cadenas puede ser con conversión de tipos mediante == o estricta con ===. También funcionan los operadores < y > si ambas son cadenas. Al comparar cadenas con valores numericos podemos utilizar:

  • strcmp: 0 iguales, <0 si a<b o >0 si a>b
  • strcasecmp: las pasa a minúsculas y compara
  • strncmp / strncasecmp: compara los N primeros caracteres
  • strnatcmp: comparaciones naturales
<?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
?>

Si lo que queremos es buscar dentro de una cadena, tenemos:

  • strpos / strrpos: busca en una cadena y devuelve la posición de la primera/última ocurrencia.
  • strstr / strchr (alias): busca una cadena y devuelve la subcadena a partir de donde la ha encontrado
  • stristr: ignora las mayú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"
?>

Si queremos averiguar que contiene las cadenas, tenemos un conojunto de funciones de comprobaciones de tipo, se conocen como las funciones ctype que devuelven un booleano:

  • ctype_alpha → letras
  • ctype_alnum → alfanuméricos
  • ctype_digit → dígitos
  • ctype_punct → caracteres de puntuación, sin espacios
  • ctype_space → son espacios, tabulador, salto 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

Si queremos romper las cadenas en trozos, tenemos:

  • explode: convierte en array la cadena mediante un separador.
  • implode / join: pasa un array a cadena con un separador
  • str_split / chunk_split: pasa una cadena a una array/cadena cada X caracteres
<?php
$frase = "Quien busca encuentra, eso dicen, a veces";
$partes = explode(",", $frase);

$ciudades = ["Elche", "Aspe", "Alicante"];
$cadenaCiudades = implode(">", $ciudades);

$partes3cadena = chunk_split($frase, 3);
// Qui
// en
// bus
// ca
// ...
$partes3array = str_split($frase, 3);
// ["Qui", "en ", "bus", "ca ", "enc", …]
?>

Si queremos trabajar con tokens:

  • strtok(cadena, separador)
  • y dentro del bucle: strtok(separador)

Finalmente, para separarla en base al formato:

  • sscanf: al revés que 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: número de veces que aparece la subcadena dentro de la cadena
  • substr_replace: reemplaza parte de la cadena a partir de su posición, y opcionalmente, longitud
<?php
$batman = "Bruce Wayne es Batman";
$empresa = substr($batman, 6, 5); // Wayne
$bes = substr_count($batman, "B"); // 2
// Bruce Wayne es camarero
$camarero1 = substr_replace($batman, "camarero", 15);
$camarero2 = substr_replace($batman, "camarero", -6); // quita 6 desde el final
// Bruno es Batman
$bruno = substr_replace($batman, "Bruno", 0, 11);
?>

También disponemos de una serie de funciones que facilitan las codificaciones desde y hacia HTML:

  • htmlentities: convierte a entidades HTML, por ejemplo, á por &aacute;, ñ por &ntilde;, < por &lt;, etc..
  • htmlspecialchars: idem pero solo con los caracteres especiales (&, ", ', <, >, ...)
  • striptags: elimina etiquetas HTML.
  • nl2br: cambia saltos de línea por <br />.
  • rawurlencode / rawurldecode: codifica/decodifica una URL (espacios, ...).

Estas funciones las utilizaremos en la unidad 4.- Programación Web.

Matemáticas

Disponemos tanto de constantes como funciones ya definidas para trabajar con operaciones matemáticas.

  • Constantes ya definidas
    • M_PI, M_E, M_EULER, M_LN2, M_LOG2E
    • PHP_INT_MAX, PHP_FLOAT_MAX
  • Funciones de cálculo
    • pow, sqrt, log, decbin, bindec, decoct, dechex, base_convert, max, min
  • Funciones trigonométricas
    • sin, cos, tan, deg2rad, rad2deg
  • Funciones para trabajar con números aleatorios
    • rand, mt_rand (más rápida)

Aunque la mayoría de ellas son muy específicas de problemas matemáticos / estadísticos, es muy común que tengamos que redondear y/o formatear los cálculos antes de mostrarlos al usuario.

Mediante la función number_format(numero, cantidadDecimales, separadorDecimales, separadorMiles) podermos pasar números a cadena con decimales y/o separadores de decimales y/o de miles.

<?php
$nf = 1234.5678;
echo number_format($nf, 2); // 1,234.57
echo number_format($nf, 2, "M", "#"); // 1#234M57
?>

Para redondear, tenemos abs para el valor absoluto y round para redondear, ceil para aproximación por exceso y floor por defecto.

<?php
$num = 7.7;
$siete = floor($num);
$ocho = ceil($num);

$otro = 4.49;
$cuatro = round($otro);
$cuatrocinco = round($otro, 1);
$cinco = round($cuatrocinco);
?>

Tipos de datos

Finalmente, para realizar conversiones de datos o si queremos trabajar con tipos de datos, tenemos las siguientes funciones:

  • floatval, intval, strval: devuelve una variable del tipo de la función indicada
  • settype: fuerza la conversión
  • gettype: obtiene el tipo
  • is_int, is_float, is_string, is_array, is_object: devuelve un booleano a partir del tipo recibido
<?php
$uno = 1;
var_dump(is_int($uno)); // true
$unofloat = floatval($uno);
settype($uno, "string");
var_dump(is_int($uno)); // false
var_dump(is_string($uno)); // true
settype($uno, "float");
var_dump(is_int($uno)); // false
var_dump(is_float($uno)); // true
var_dump(is_int(intval($uno))); // true
?>