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 enterosubstr: devuelve una subcadena de la cadena originalstr_replace: reemplaza caracteres en una cadenastrtolowerystrtoupper: 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 ASCIIord: 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 finalltrim/rtrimochop: 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,<0sia<bo>0sia>bstrcasecmp: las pasa a minúsculas y comparastrncmp/strncasecmp: compara los N primeros caracteresstrnatcmp: 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 encontradostristr: 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→ letrasctype_alnum→ alfanuméricosctype_digit→ dígitosctype_punct→ caracteres de puntuación, sin espaciosctype_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 separadorstr_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 quesprintf, 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 cadenasubstr_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á,ñporñ,<por<, 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_LOG2EPHP_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 indicadasettype: fuerza la conversióngettype: obtiene el tipois_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
?>