PHP: Funciones y librer´ıas
Francisco J. Mart´ın Mateos Carmen Graciani Diaz
Dpto. Ciencias de la Computaci´on e Inteligencia Artificial Universidad de Sevilla
Cadenas de texto
El proceso de creaci´on de p´ aginas Web usando PHP requiere generar las cadenas de texto que forman el c´ odigo HTML Continuamente estamos trabajando con cadenas de texto Para construir cadenas de texto a partir de valores de variables PHP podemos utilizar " como delimitador,
consiguiendo la expansi´on de cualquier variable que se incluya dentro de la cadena
Si la variable$nombrealmacena el nombre de un usuario de mi p´agina Web, entonces la cadena de texto PHP:
"Hola $nombre, bienvenido a mi Web"
generar´ıa el resultado:
Hola Francisco, bienvenido a mi Web
Igualmente podemos necesitar otras funciones que permitan
Cadenas de texto
La funci´on strlen()
Sintaxis: strlen(str) Argumentos: Una cadenastrResultado: Devuelve la longitud de la cadenastr
La funci´on trim()
Sintaxis: trim(str)
Argumentos: Una cadenastr
Resultado: Devuelve una cadena como la del argumentostr pero eliminando el espacio en blanco (espacios, tabuladores, ...) del comienzo y del final
Notas:
Esta funci´on no modifica la cadena original
Existen las funcionesltrimyrtrimque eliminan el espacio en blanco s´olo del comienzo y s´olo del final, respectivamente
Cadenas de texto
La funci´on strtoupper()
Sintaxis: strtoupper(str) Argumentos: Una cadenastrResultado: Una cadena de texto como la del argumentostr pero en may´usculas
La funci´on strtolower()
Sintaxis: strtolower(str) Argumentos: Una cadenastrResultado: Una cadena de texto como la del argumentostr pero en min´usculas
Nota: Estas funciones no modifican la cadena original
Comparaciones de cadenas
Para comparar cadenas de texto se pueden utilizar los operadores == y ===
El operador==devuelveTRUEsi las cadenas que se comparan son iguales
Si las cadenas est´an formadas exclusivamente por n´umeros entonces PHP realiza una comparaci´on de tipo num´erico La comparaci´on"001" == "1"devuelveTRUE
El operador===devuelveTRUEsi las cadenas que se comparan son identicas
Si las cadenas est´an formadas exclusivamente por n´umeros entonces PHP NO realiza una comparaci´on de tipo num´erico La comparaci´on"001" === "1"devuelveFALSE
Comparaciones de cadenas
Otra forma de comparar cadenas es con la funci´on strcmp()
Sintaxis: strcmp(str1,str2)Argumentos: Dos cadenasstr1ystr2
Resultado: Devuelve0si ambas cadenas son iguales, un n´umero negativo sistr1es lexicogr´aficamente menor que str2y un n´umero positivo si str1es lexicogr´aficamente mayor questr2
Nota: Esta funci´on distingue entre may´usculas y min´usculas.
Si queremos comparar cadenas sin tenerlas en cuenta, debemos usar la funci´onstrcasecmp()
Subcadenas
La funci´on substr()
Sintaxis: substr(str,ini,tam)
Argumentos: Una cadenastr, una posici´oniniy un tama˜no tam
Resultado: Devuelve la subcadena destrdesde la posici´on indicada poriniy del tama˜no indicado portam
Notas:
Las posiciones en las cadenas empiezan a contar desde 0 Siinies positivo indica una posici´on contada desde el principio destr, si es negativo indica una posici´on contada desde el final destr
El argumentotames opcional, si no se indica entonces la funci´on devuelve la subcadena desde la posici´on indicada por inihasta el final
Sitames negativo indica que hay que eliminar ese n´umero de caracteres del final de la subcadena obtenida como si dicho argumento no existiera
Subcadenas
Ejemplos
La instrucci´on substr(’abcdef’, 2, 3)devuelve la subcadena desde la posici´on 2 (’c’) y de tama˜no 3: cde La instrucci´onsubstr(’abcdef’,-2)devuelve la subcadena desde la posici´on -2 (’e’) hasta el final: ef
La instrucci´onsubstr(’abcdef’,-2, 1)devuelve la subcadena desde la posici´on -2 (’e’) y de tama˜no 1: e La instrucci´onsubstr(’abcdef’, 1,-2)devuelve la
subcadena desde la posici´on 1 (’b’) hasta 2 caracteres antes de llegar al final: bcd
La instrucci´on substr(’abcdef’,-4,-2)devuelve la subcadena desde la posici´on -4 (’c’) hasta 2 caracteres antes de llegar al final: cd
Subcadenas
La funci´on strpos()
Sintaxis: strpos(str1,str2,ini)
Argumentos: Dos cadenasstr1ystr2y una posici´onini Resultado: Devuelve la posici´on de la primera ocurrencia de la cadenastr2en str1desde la posici´onini
Nota: El argumentoinies opcional y su valor por defecto es 0
La funci´on strstr()
Sintaxis: strstr(str1,str2)
Argumentos: Dos cadenasstr1ystr2
Resultado: Devuelve la subcadena que comienza en la posici´on de la primera ocurrencia de la cadenastr2enstr1
Nota: Ambas funciones distinguen entre may´ usculas y
min´ usculas
Conversi´ on entre cadenas y arrays
La funci´on explode()
Sintaxis: explode(str1,str2,tam)
Argumentos: Dos cadenasstr1ystr2y un tama˜notam Resultado: Devuelve el array asociativo cuyos valores son los trozos de la cadenastr2delimitados porstr1, hasta un total detamtrozos
Notas:
El argumentotames opcional y si no se indica se obtendr´an todos los trozos posibles
Si se indica el argumentotamentonces el ´ultimo trozo contendr´a el resto de la cadenastr2
Conversi´ on entre cadenas y arrays
La funci´on implode()
Sintaxis: implode(str,array)
Argumentos: Una cadenastry un arrayarray Resultado: Devuelve la cadena formada por los valores almacenados en el array asociativoarrayconcatenados usando la cadenastrcomo delimitador entre ellos Notas:
Los valores del array se concatenan en el orden en que se crearon
No se muestran las claves del array
Arrays asociativos
Los arrays en PHP disponen de un puntero que se˜ nala al elemento actual
Inicialmente dicho puntero se˜ nala al primer elemento insertado en el array
Este puntero sirve para acceder a la informaci´on del array con
las funciones current(), key(), reset(), end(), next(),
prev() y each()
Recorriendo arrays asociativos
La funci´on current()
Sintaxis: current(array)Argumentos: Un array asociativoarray
Resultado: Devuelve el valor del elemento actual en elarray
La funci´on key()
Sintaxis: key(array)
Argumentos: Un array asociativoarray
Resultado: Devuelve la clave del elemento actual en elarray
Recorriendo arrays asociativos
La funci´on reset()
Sintaxis: reset(array)Argumentos: Un array asociativoarray
Resultado: Mueve el puntero al primer elemento delarrayy devuelve el valor de dicho elemento
La funci´on end()
Sintaxis: end(array)Argumentos: Un array asociativoarray
Resultado: Mueve el puntero al ´ultimo elemento delarrayy devuelve el valor de dicho elemento
Recorriendo arrays asociativos
La funci´on next()
Sintaxis: next(array)Argumentos: Un array asociativoarray
Resultado: Avanza una posici´on el puntero asociado aarrayy devuelve el valor de dicho elemento
Nota: Si el puntero se encuentra al final del array, entonces devuelveFALSEy no avanza
La funci´on prev()
Sintaxis: prev(array)Argumentos: Un array asociativoarray
Resultado: Retrocede una posici´on el puntero asociado a arrayy devuelve el valor de dicho elemento
Nota: Si el puntero se encuentra al principio del array, entonces devuelveFALSEy no retrocede
Recorriendo arrays asociativos
Recorriendo arrays asociativos
<?php
$a = array(1,2,’hola’ => 3, 5 => 4, ’adios’ => 5);
current($a); // => 1 key($a); // => 0 next($a); // => 2 current($a); // => 2 key($a); // => 1 end($a); // => 5 key($a); // => adios prev($a); // => 4 current($a); // => 4 reset($a); // => 1
?>
Recorriendo arrays asociativos
La funci´on each()
Sintaxis: each(array)Argumentos: Un array asociativoarray
Resultado: Devuelve un array con la clave del elemento actual enarrayen las posiciones0y’key’y su valor en las posiciones1y’value’
Nota: Esta funci´on avanza una posici´on el puntero asociado al array
Recorriendo arrays asociativos
Recorriendo arrays asociativos
<?php
$a = array(1,2,’hola’ => 3, 5 => 4, ’adios’ => 5);
end($a); // => 5
print_r(each($a)); /*
=> Array ( [1] => 5 [value] => 5 [0] => adios [key] => adios ) */
?>
Ordenando arrays asociativos
La funci´on sort()
Sintaxis: sort(array)Argumentos: Un array asociativoarray
Resultado: Ordena elarraypor contenido en orden ascendente
La funci´on rsort()
Sintaxis: rsort(array)Argumentos: Un array asociativoarray
Resultado: Ordena elarraypor contenido en orden descendente
Nota: Estas funciones crean nuevas claves en el array para
almacenar el resultado, eliminando todas las claves anteriores
Ordenando arrays asociativos
La funci´on ksort()
Sintaxis: ksort(array)Argumentos: Un array asociativoarray
Resultado: Ordena elarraypor clave en orden ascendente
La funci´on rksort()
Sintaxis: rksort(array)
Argumentos: Un array asociativoarray
Resultado: Ordena elarraypor clave en orden descendente
Serializaci´ on de arrays
Un array asociativo puede tener una estructura compleja que dificulta su almacenamiento en ficheros o bases de datos La serializaci´on es un proceso que transforma estructuras complejas en cadenas de texto con objeto de almacenarlas o transferirlas con comodidad
El proceso de serializaci´on se puede revertir para recuperar la estructura original
En PHP podemos aplicar el proceso de serializaci´on a los
arrays asociativos para obtener una representaci´on compacta
en forma de cadena
Serializaci´ on de arrays
La funci´on serialize()
Sintaxis: serialize(array)Argumentos: Un array asociativoarray
Resultado: La representaci´on compacta en forma de cadena delarray
La funci´on unserialize()
Sintaxis: unserialize(str)Argumentos: Un cadena de textostrobtenida en una serializaci´on
Resultado: El array asociativo representado de forma compacta enstr
Serializaci´ on de arrays
Serializaci´ on de arrays asociativos
<?php
$a = array(1,2 => ’hola’,’tres’ => 3);
/* => Array ( [0] => 1 [2] => hola [tres] => 3 ) */
$b = serialize($a);
/* => a:3:i:0;i:1;i:2;s:4:"hola";s:4:"tres";i:3; */
$c = unserialize($b);
/* => Array ( [0] => 1 [2] => hola [tres] => 3 ) */
?>
Otras funciones
La funci´on count()
Sintaxis: count(array)Argumentos: Un array asociativoarray
Resultado: Devuelve el n´umero de elementos delarray
La funci´on in array()
Sintaxis: in array(val)
Argumentos: Un dato cualquieraval
Resultado: DevuelveTRUEsi el datovales un valor en el array
Nota: La comparaci´on distingue entre may´usculas y min´usculas
La funci´on shuffle()
Sintaxis: shuffle(array)
Argumentos: Un array asociativoarray
Tablas de datos
PHP tiene conectividad con gran cantidad de sistemas de gesti´ on de bases de datos externas, pero tambi´en tiene funcionalidades internas para trabajar con tablas de datos (DBA)
Una tabla de datos es un fichero con una colecci´on organizada de informaci´on a la que se accede a trav´es de una clave Para poder utilizar tablas de datos en PHP, este debe disponer de un gestor de tablas de datos
Los gestores de tablas de datos disponibles se pueden consultar con la instrucci´ondba handlers(true)
En lo que sigue utilizaremos el gestor de tablas de datos DB4 (Berkeley DB 4)
Tablas de datos
El primer paso para trabajar con tablas de datos es crear o abrir una, para ello utilizamos la funci´on dba open()
Sintaxis: dba open(fichero,modo,gestor)
Argumentos: Tres cadenas de textofichero,modoygestor Resultado: Devuelve el identificador del recurso asociado a la tabla de datosfichero, abierta en el modo indicado enmodo con el gestor cuyo identificador esgestor
Nota: Elmodoindica el uso que se puede hacer de la tabla de datos, puede ser
rpara acceso de lectura wacceso de lectura y escritura
cpara creaci´on y acceso de lectura y escritura
npara creaci´on, truncado y acceso de lectura y escritura
Tablas de datos
Cuando se abre una tabla de datos, por defecto ´esta queda bloqueada para que no se pueda volver a abrir mientras la tenemos en uso
La tabla de datos se desbloquea en cuanto se cierra con la funci´on dba close()
Sintaxis: dba close(recurso)
Argumentos: Elrecursoasociado a una tabla de datos, devuelto por una instrucci´on de apertura de dicha tabla de datos
Resultado: Cierra la tabla de datos asegurando que todas las operaciones sobre esta ya han terminado
Tablas de datos
En las tablas de datos se puede almacenar informaci´on asociada a claves
Tanto claves como informaci´on son cadenas de texto Las claves usualmente han de ser ´unicas
Para asociar distintos tipos de informaci´on a una misma clave hay que representar de forma compacta toda la informaci´on en una ´unica cadena de texto (serializar)
Para a˜ nadir informaci´on a una tabla usamos la funci´on dba insert
Sintaxis: dba insert(clave,valor,recurso)
Argumentos: Dos cadenas de textoclaveyvalory un recursoasociado a una tabla de datos
Resultado: Inserta en la tabla de datos asociada alrecurso una entrada correspondiente a laclavecon elvalor
Tablas de datos
La funci´on dba delete()
Sintaxis: dba delete(clave,recurso)
Argumentos: Una cadena de textoclavey un recurso asociado a una tabla de datos
Resultado: Elimina de la tabla de datos asociada alrecurso la entrada correspondiente a laclave
Nota: Si laclaveno tiene valor en elrecursoasociado a una tabla de datos, entonces no hace nada
La funci´on dba replace()
Sintaxis: dba replace(clave,valor,recurso) Argumentos: Dos cadenas de textoclaveyvalory un recursoasociado a una tabla de datos
Resultado: Reemplaza en la tabla de datos asociada al recurso, la entrada correspondiente a la clave, por el valor Nota: Si laclaveno tiene un valor en elrecursoasociado a una tabla de datos, entonces funciona comodba insert()
Tablas de datos
Modificando la tabla de datos
<?php
$db = dba_open("nombres.db","n","db4");
// Insertamos un registro
dba_insert("75438323W","Francisco Mart´ın Mateos",$db);
// Modificamos un registro
dba_replace("75438323W","Francisco J. Mart´ın Mateos",$db);
// Modificamos un registro que no existe
dba_replace("75438323R","Francisco J. Mart´ın Mateos",$db);
// Insertamos otro registro
dba_insert("12345678O","Juan Con Miedo",$db);
// Borramos el registro dba_delete("12345678O",$db);
// Insertamos otro registro
dba_insert("12345678O","Juan Sin Miedo",$db);
// Borramos un registro que no existe dba_delete("12345678Q",$db);
// Cerramos la base de datos
Tablas de datos
La funci´on dba exists()
Sintaxis: dba exists(clave,recurso)
Argumentos: Una cadena de textoclavey un recurso asociado a una tabla de datos
Resultado: Comprueba si en la tabla de datos asociada al recurso, hay una entrada correspondiente a laclave
La funci´on dba fetch()
Sintaxis: dba fetch(clave,recurso)
Argumentos: Una cadena de textoclavey un recurso asociado a una tabla de datos
Resultado: Devuelve la entrada correspondiente a laclaveen la tabla de datos asociada alrecurso
Nota: Si laclaveno tiene un valor en elrecursoasociado a una tabla de datos, entonces devuelveFALSE
Tablas de datos
La funci´on dba firstkey()
Sintaxis: dba firstkey(recurso)
Argumentos: Unrecursoasociado a una tabla de datos Resultado: Devuelve la primera clave de la tabla de datos asociada alrecursoy establece un apuntador interno en la tabla en esta entrada
La funci´on dba nextkey()
Sintaxis: dba nextkey(recurso)
Argumentos: Unrecursoasociado a una tabla de datos Resultado: Devuelve la siguiente clave de la tabla de datos asociada alrecursoy avanza una posici´on el apuntador interno
Tablas de datos
Consultando la tabla de datos
<?php
$db = dba_open("nombres.db","r","db4");
echo "Contenido de la base de datos:<BR>";
echo "<OL>";
$key = dba_firstkey($db);
while ($key) {
echo "<LI>Clave: $key Valor:";
echo dba_fetch($key, $db);
echo "<BR>";
$key = dba_nextkey($db);
}
echo "</OL>";
?>
Tablas de datos
La funci´on dba sync()
Sintaxis: dba sync(recurso)
Argumentos: Unrecursoasociado a una tabla de datos Resultado: Sincroniza la tabla de datos asociada alrecurso:
escribe en el fichero asociado todos los cambios pendientes de realizar
La funci´on dba optimize()
Sintaxis: dba optimize(recurso)
Argumentos: Unrecursoasociado a una tabla de datos Resultado: Optimiza la tabla de datos asociada alrecurso:
modifica el fichero asociado mejorando la forma en que la tabla de datos est´a almacenada
Ejemplo: registro de usuarios
Registro de usuarios: base-de-datos.php
<HTML>
<HEAD>
<TITLE>Base de datos de usuarios</TITLE>
</HEAD>
<?php
// Borrar la tabla de datos
if (isset($_POST[boton]) && $_POST[boton] == "borrar") {
$db = dba_open("nombres.db","n","db4");
dba_close($db);
}
// Insertar una entrada en la base de datos if (isset($_POST[dni]) &&
isset($_POST[nombre]) &&
isset($_POST[apellidos])) {
$db = dba_open("nombres.db","c","db4");
$a = array(nombre => $_POST[nombre], apellidos => $_POST[apellidos]);
dba_insert($_POST[dni],serialize($a),$db);
dba_close($db);
}
Ejemplo: registro de usuarios
Registro de usuarios: base-de-datos.php
<BODY>
<H1>Base de datos de usuarios</H1>
<FORM action="base-de-datos.php"
method="post">
Nombre: <INPUT type="text" name="nombre"> <BR>
Apellidos: <INPUT type="text" name="apellidos"> <BR>
DNI: <INPUT type="text" name="dni"> <BR>
<INPUT type="submit" name="boton" value="datos">
</FORM>
Ejemplo: registro de usuarios
Registro de usuarios: base-de-datos.php
<H1>Contenido de la base de datos</H1>
<?php
$db = dba_open("nombres.db","r","db4");
echo "<OL>";
$key = dba_firstkey($db);
while ($key) {
echo "<LI>Clave: $key<BR>";
$b = unserialize(dba_fetch($key, $db));
echo "Nombre: $b[nombre]<BR>";
echo "Apellidos: $b[apellidos]<BR>";
$key = dba_nextkey($db);
}
echo "</OL>";
?>
<FORM action="base-de-datos.php"
method="post">
<INPUT type="submit" name="boton" value="borrar">
</FORM>
</BODY>