Ingresar primer objetivo

Anuncio
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
ESCUELA DE COMPUTACIÓN
CICLO: 01/2014
Nombre de la Practica:
Lugar de Ejecución:
Tiempo Estimado:
MATERIA:
DOCENTES:
GUIA DE LABORATORIO #3
Matrices y funciones en PHP
Centro de Cómputo
2 horas con 30 minutos
Lenguajes Interpretados en el Servidor
Mg. Blanca Iris Cañas Abarca, Ing. Ricardo Ernesto Elías
Guandique
I. OBJETIVOS
Que el estudiante:
 Desarrolle la capacidad de utilizar eficazmente matrices para almacenar valores y acceder a sus valores en
los scripts PHP.
 Sea capaz de utilizar estructuras de control repetitivas para trabajar con datos procedentes de una matriz
escalar o asociativa.
 Adquiera el dominio de matrices unidimensionales y multidimensionales utilizando ciclos o lazos
repetitivos anidados.
 Haga uso de diversas funciones para manejo de matrices con PHP.
 Adquirir el dominio de la sintaxis y el uso de funciones con PHP.
 Lograr la habilidad necesaria para la declaración de funciones con o sin argumentos y con devolución o
no de valores.
 Hacer uso de características avanzadas de las funciones como la lista variable de argumentos, las
funciones variables y recursividad.
 Hacer uso de la modularidad para crear scripts que serán incluidos dentro de un script principal.
II. INTRODUCCION TEORICA
Matrices en PHP
Una matriz o arreglo es un tipo de dato compuesto que permite almacenar bajo un mismo nombre un
conjunto de valores que pueden ser de tipos de datos diferentes. Cuando se define una matriz se hace de
forma similar a las variables escalares con la diferencia de que la asignación de valores se debe realizar a cada
una de las posiciones del arreglo. También se puede utilizar en lugar de la asignación directa estructuras de
control como ciclos repetitivos o funciones para asignar varias posiciones de una vez, como veremos más
adelante.
1 / 59
Guía # 3: Matrices y funciones en PHP
Clasificación de las matrices
En PHP se pueden clasificar las matrices de dos formas:
a) Por el tipo de índice que utilizan. Este índice se utiliza para hacer referencia a un elemento específico
del arreglo– y,
b) Por el número de dimensiones de la matriz. Esto es, cuántos índices son necesarios para hacer
referencia a un elemento específico.
Tipos de matrices según el tipo de índice:
a) Matrices escalares
También se les conoce como matrices enumeradas o indexadas, por el hecho que utilizan
números enteros como índices. En PHP el índice para el primer elemento de un arreglo empieza
en cero y los siguientes elementos van aumentando en uno este valor de índice, de modo que el
segundo elemento tiene índice uno, el tercero índice dos, etc.
Por ejemplo, se puede tener una matriz llamada $numeros con cinco elementos. Para asignar
un valor a cada uno de los elementos de este arreglo, habría que escribir:
$numeros[0] = 1;
$numeros[1] = 2;
$numeros[2] = 3;
$numeros[3] = 4;
$numeros[4] = 5;
Luego, si deseamos mandar a imprimir el tercer elemento de este arreglo, tendríamos que escribir:
echo $numero[2];
Ahora bien, si lo que deseamos es imprimir todos los elementos de la matriz, la mejor solución sería utilizar
una sentencia repetitiva como esta:
for($i=0; $i<count($numeros); $i++){
echo $numeros[$i] . "<br />\n";
}
b) Matrices asociativas
Estas matrices también son conocidas como tablas hash. Se caracterizan por
utilizar una cadena de caracteres como índice de la matriz. Lo normal es
utilizar una cadena que permita asociar fácilmente el índice con el valor que
almacena el elemento.
Por ejemplo, se puede crear una matriz llamada $monedas con cuatro
elementos y asociar valores a cada uno de estos elementos de la siguiente
forma:
$monedas["El Salvador"] = "dólar";
$monedas["Guatemala"] = "quetzal";
$monedas["Costa Rica"] = "colón";
$monedas["Honduras"] = "lempira";
Si deseamos mandar a imprimir los valores de este arreglo, deberíamos escribir:
echo $monedas["El Salvador"];
echo $monedas["Guatemala"];
echo $monedas["Costa Rica"];
echo $monedas["Honduras"];
Lenguajes Interpretados en el Servidor
2
Guía # 3: Matrices y funciones en PHP
O, haciendo uso de estructuras de control repetitivas, con la sentencia foreach:
foreach($monedas as $key => $value){
echo "Moneda de " . $key . ": " . $value . "<br />\n";
}
Tipos de matrices según el número de dimensiones:
a) Matrices unidimensionales
Es una matriz que utiliza un único índice para hacer referencia a todos los elementos de la misma. Este índice
puede ser escalar o asociativo.
b) Matrices multidimensionales
Es una matriz que necesita utilizar más de un índice para hacer referencia a un elemento específico. De todas
las matrices multidimensionales, las más utilizados son las de dos dimensiones. Los arreglos de tres o más
dimensiones no se utilizan tanto debido a que son más difíciles de comprender y manejar.
El siguiente bloque de código muestra la definición de un arreglo multidimensional (con índices asociativos) y
luego manda a imprimir en la ventana del navegador uno de sus elementos:
<?
$pais=array
(
"espana" =>array
(
"nombre"=>"España",
"lengua"=>"Castellano",
"moneda"=>"Peseta"
),
"francia" =>array
(
"nombre"=>"Francia",
"lengua"=>"Francés",
"moneda"=>"Franco"
)
);
echo $pais["espana"]["moneda"]; //Imprime en la ventana del navegador: "Peseta"
?>
Creación de matrices en PHP
En PHP, las matrices o arreglos se pueden crear asignando los valores a los elementos directamente, tal y
como se ha hecho en los ejemplos anteriores, o se pueden utilizar funciones para ese propósito. Las funciones
que permiten crear arreglos en PHP son: array() y range().
La sintaxis de cada una de ellas se muestra a continuación:
$arreglo = array($valor1, $valor2, … , $valorn);
$matriz = range($valorinicial, $valorfinal, $desplazamiento);
La función array() se utiliza para crear una variable de tipo matriz y asignarle los valores que va a contener en
una sola instrucción. En tanto que, con range() se puede crear una matriz que comienza desde el
$valorinicial y termina con el $valorfinal.
Asignar los elementos de una matriz a variables escalares
PHP proporciona una función que permite asignar en una sola instrucción los elementos de una matriz a
variables escalares independientes. Esta función es list(), que posee como argumentos las variables escalares
en donde se almacenarán los valores almacenados en las posiciones del arreglo de forma ordenada. La
sintaxis de la función es la que se muestra a continuación:
list ($variable1, $variable2, … , $variablen) = $mi_array
Lenguajes Interpretados en el Servidor
3
Guía # 3: Matrices y funciones en PHP
Donde,
$mi_array, es la matriz o arreglo del que se extraerán los elementos.
$variable1, $variable2, … , $variablen, son las variables escalares independientes en las que
se asignarán los diferentes elementos de la matriz.
Funciones importantes para trabajar con matrices
El lenguaje PHP, brinda una cantidad considerable de funciones para facilitar el trabajo con matrices. A
continuación se brinda información detallada de varias de ellas:
Funciones para recorrer una matriz
Cuando se trabaja con matrices, PHP ofrece una serie de funciones que permiten realizar de forma más fácil y
conveniente esta tarea.
count(): Permite obtener el número de elementos que componen la matriz. Es muy útil cuando se pretende
realizar un recorrido sobre una matriz utilizando ciclos for, while o do-while. Por ejemplo:
for($i=0; $i<count($matriz); $i++)
sizeof(): También se utilize para obtener el número de elementos de una matriz. Por ejemplo:
for($i=0; $i<sizeof($matriz); $i++)
next(): Devuelve el valor del elemento siguiente al actual (si existe), avanzando el puntero interno una
posición. En caso de que el elemento actual sea el último de la matriz, devuelve false.
prev(): Devuelve el valor del elemento anterior al actual (si existe), retrocediendo el puntero interno una
posición. En caso de que el elemento actual sea el primero, devuelve false.
current(): Devuelve el valor del elemento situado en la posición actual del cursor. Si la matriz está vacía o no
hay más elementos, la función devolverá false.
key(): Devuelve el índice del elemento situado en la posición actual del cursor. Si la matriz está vacía, o no
hay más elementos, devuelve la constante NULL.
reset(): Sitúa el cursor interno de la matriz en el primer elemento de la misma y devuelve el valor de dicho
elemento. Si la matriz está vacía, la función devuelve el valor false.
end(): Avanza el cursor interno de la matriz hasta el último elemento de la misma y devuelve el valor de
dicho elemento. Si la matriz está vacía devuelve false.
each(): Se usa para recorrer matrices (especialmente matrices asociativas), devolviendo simultáneamente el
índice y el valor asociado al índice actual de un elemento. Además, avanza el puntero interno de la matriz
hacia el siguiente elemento. Si el puntero interno apunta a la última posición de la matriz, la función devuelve
false.
list(): Asigna una lista de variables en una sola operación. Suele utilizarse en combinación con la función
each().
OBSERVACIÓN: El argumento de todas las funciones anteriores es una matriz. A excepción de la función
list().
Ejemplo:
$matriz = array("Primavera", "Verano", "Otoño", "Invierno");
do{
Lenguajes Interpretados en el Servidor
4
Guía # 3: Matrices y funciones en PHP
$index = key($matriz);
$value = current($matriz);
echo $index . ": " . $value . "<br>\n";
}while(next($matriz));
foreach
PHP4 y PHP5 incluyen la instrucción foreach, tal como Perl y algunos otros lenguajes. Esta instrucción
permite recorrer los elementos de una matriz de una forma sencilla. La instrucción permite obtener cada uno
de los valores almacenados en el arreglo y asignarlos automáticamente en una variable para trabajar con ellos
dentro del bloque de instrucciones del foreach. También es posible obtener el índice si acaso, se ha utilizado
un matriz asociativa. Hay dos sintaxis; la segunda es una extensión menor, pero útil de la primera:
foreach(expresion_array as $value) //sentencias;
foreach(expresion_array as $key => $value) //sentencias;
La primera forma recorre el array dado por expresion_array. En cada iteración, el valor del elemento
actual se asigna a $value y el puntero interno del array se avanza en una unidad (así en la siguiente
iteración, se estará apuntando de forma automática el elemento siguiente).
La segunda manera hace lo mismo, salvo que la clave del elemento actual será asignada a la variable $key en
cada iteración.
Notas:
 Cuando foreach comienza su primera ejecución, el puntero interno a la lista (array) se reinicia
automáticamente al primer elemento del array. Esto significa que no se necesita llamar a reset() antes de
un bucle foreach.
 Hay que tener en cuanta que foreach trabaja con una copia de la lista (array) especificada y no la lista en si,
por ello el puntero de la lista no es modificado como en la construcción each.
Algunos ejemplos más para demostrar su uso:
<?php
/* foreach ejemplo 1: sólo valor*/
$a = array(1, 2, 3, 17);
foreach($a as $v) {
print "Valor actual de \$a: $v.\n";
}
/* foreach ejemplo 2: valor (con clave impresa para ilustrar) */
$a = array(1, 2, 3, 17);
$i = 0; /* sólo para propósitos demostrativos */
foreach($a as $v) {
print "\$a[$i] => $v.\n";
$i++;
}
/* foreach ejemplo 3:
$a = array(
"uno" => 1,
"dos" => 2,
"tres" => 3,
"diecisiete" => 17
);
clave y valor */
Lenguajes Interpretados en el Servidor
5
Guía # 3: Matrices y funciones en PHP
foreach($a as $k => $v) {
print "\$a[$k] => $v.\n";
}
/* foreach ejemplo 4: matriz multi-dimensional */
$a[0][0]
$a[0][1]
$a[1][0]
$a[1][1]
=
=
=
=
"a";
"b";
"y";
"z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
/* foreach ejemplo 5: matriz dinámica */
foreach(array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
?>
Funciones
Una función es un bloque de código independiente y autónomo que contiene un grupo de instrucciones que
se identifican con un nombre. Las funciones pueden invocarse todas las veces que se requiera desde cualquier
punto de un script. El código de las funciones puede aparecer dentro del script que se esté realizando o puede
ser parte de un script independiente que será llamado como archivo de inclusión (otro script PHP invocado).
Generalmente, cuando se realizan scripts con PHP las instrucciones se ejecutan conforme van siendo
procesadas por el intérprete del lenguaje. Sin embargo, a la hora de realizar scripts más complejos, hay
ocasiones en las que el mismo código ha de ser ejecutado más de una vez. Para estos casos sería útil que el
lenguaje de programación permitiera dividir el código en segmentos más pequeños, de forma que cada
bloque de código PHP pudiera ser agrupado bajo un identificador para que pudiera ser accedido de forma
independiente.
PHP permite la creación de funciones que permiten recoger todos los aspectos planteados anteriormente. Una
función permite desarrollar una tarea concreta y bien definida. Se encuentra separada del resto de
instrucciones del programa y se le asigna un nombre para que posteriormente pueda ser llamada desde otro
punto del script, o incluso, desde otro script. Es a través del nombre de la función que se pueden ejecutar las
instrucciones contenidas en la función tantas veces como sea necesario. La utilización de funciones permite
que un script aparezca escrito como una lista de referencias a las tareas que se deben hacer para crear una
página de respuesta.
Las funciones también pueden o no, aceptar parámetros o argumentos externos de los que dependa el proceso
que deba realizarse para posteriormente devolver un valor.
Sintaxis de las funciones en PHP
En su forma más compleja una función se declara con la palabra reservada function. A continuación, se debe
declarar el nombre de la función y posteriormente, y entre paréntesis, cada uno de los argumentos que
recibirá separados por coma. En el caso más simple, sólo se colocan los paréntesis vacíos inmediatamente
después del nombre de la función. Después de cerrar los paréntesis debe abrir llaves y colocar las
instrucciones que realizará la función para luego cerrar la llave. La sintaxis se muestra a continuación:
function nombre_funcion([$param1, $param2, … , $paramn]){
//bloque de instrucciones PHP
}
Lenguajes Interpretados en el Servidor
6
Guía # 3: Matrices y funciones en PHP
Como se puede ver, son necesarios los siguientes componentes en la declaración de una función:
 La palabra reservada function que debe utilizarse para indicar al intérprete de PHP que se va a
crear una nueva función
 nombre_funcion indica el nombre con el que se va a identificar la función dentro del script PHP
para su posterior llamada.
 $param1, $param2, ... , $paramn representan los parámetros necesarios para que la función pueda
ser ejecutada. Los parámetros han de expresarse siempre entre paréntesis y separados por comas.
Incluso si la función no necesitara ningún parámetro, deberán utilizarse los paréntesis.
 Bloque de instrucciones PHP, representa el conjunto de sentencias o instrucciones que se van
a ejecutar cada vez que se haga una llamada a la función.
Argumentos o parámetros de la función
El diseño de una función puede o debería incluir la aceptación opcional de uno o más argumentos o
parámetros que representarán valores que se pasan desde el exterior a la función. Esto permite que la función
sea independiente del exterior, haciéndola más portable.
Se puede entender un argumento o parámetro como una variable con ámbito local a la función que sirve para
almacenar valores que son pasados a la función.
Los argumentos o parámetros se especifican colocando nombres de variables entre los paréntesis de la
definición de la función:
function myfunction($parametro1, $parametro2){
//Código de la función
}
Devolución de valores
Casi siempre será importante que la función creada devuelva un valor antes de finalizar la ejecución. Aunque
también existirán casos en los que la función pudiera realizar una tarea sin que devuelva valor alguno. La
palabra reservada utilizada para devolver valores en las funciones de PHP es return, igual que en otros
lenguajes que usted ya conoce. Veamos los siguientes ejemplos:
function square ($num) {
return $num * $num;
}
echo square(4); // obtiene ’16’.
------------------------------------------function residuo($dividendo, $divisor){
$res = $dividendo % $divisor;
return $res;
}
No se puede devolver múltiples valores desde una función, pero un efecto similar se puede conseguir
devolviendo una lista.
function small_numbers(){
return array(0, 1, 2);
}
list($zero, $one, $two) = small_numbers();
Apunte importante:
 Recuerde que a los valores que se le aportan a una función desde el exterior se les denomina parámetros o
argumentos de la función. Los parámetros actúan como variables dentro de la función. Estas variables no
pueden utilizarse fuera de ese ámbito.
 El valor que devuelva la función debe ser enviado utilizando la palabra reservada return y a continuación el
nombre de la variable que contiene el resultado.
Lenguajes Interpretados en el Servidor
7
Guía # 3: Matrices y funciones en PHP
Ventajas del uso de funciones
a) Simplificación de código
Las funciones hacen que el código de un script sea más fácil de leer, por tanto, lo hacen más entendible y
más agradable a la vista del que tenga que leer el código. Esto es, porque evita el tener que repetir varias
veces un segmento de código dentro de un mismo script. En lugar de ello se escribe una sola vez y luego
dentro del script solamente hacemos la llamada a la función, en lugar de volverlo a escribir.
b) Reutilización de código
Permite que otros scripts, a parte del script donde se digitó el código de la función, puedan hacer uso de
dicha función. Esto evita la carga del programador de tener que escribir la misma funcionalidad en
diferentes scripts.
c) Modularidad
El uso de funciones permite que las modificaciones al código sean menos trabajosas para el programador,
porque en lugar de tener que cambiar el mismo código en varios lugares de un script, solamente se
modifica el código de la función y los scripts que la llaman no sufren modificación alguna (al menos, en la
mayor parte de los casos).
Funcionamiento de una función en PHP
Aunque el comportamiento puede variar en algunos casos, la mayoría de las funciones siguen un proceso
como el siguiente, una vez que son invocadas:
1. Aceptan uno, o más, valores, conocidos como argumentos, desde el script que la llama,
2. Realizan un proceso utilizando dichos valores (argumentos o parámetros), y
3. Devuelven el resultado y el control del programa al script que hizo la llamada.
Código de una función en Visual Basic
Características de las funciones de PHP (versión 4.2.X en adelante)
1. PHP no hace distinción entre mayúsculas y minúsculas para los nombres de las funciones. Pese a ello se
recomienda ser consistente en el código que se escribe de tal forma que si se nombró a una función
Cambiar, utilizar en el código siempre Cambiar, y no, cambiar, CAMBIAR, CAMbiar, etc.
2. Al igual que con las variables, podemos hacer referencia (una llamada) a una función antes de definirla en
el código. Existe una excepción, que se da cuando la función ha sido definida condicionalmente. En ese
caso la definición debe preceder a la llamada.
3. No se puede redefinir una función o eliminar su definición. Esto se debe a que PHP no soporta sobrecarga
de funciones como otros lenguajes de programación. Por ejemplo C++.
4. Las últimas versiones de PHP, (4 o superior) soportan el uso de lista variable de argumentos en las
Lenguajes Interpretados en el Servidor
8
Guía # 3: Matrices y funciones en PHP
5.
funciones.
Se pueden utilizar parámetros por defecto en las funciones asignándole un valor inicial dentro de la
definición de los parámetros de la función.
Tipos de funciones.
En PHP podemos utilizar las funciones incorporadas del lenguaje (abs(), list(), array(), chr(), intval(), trim(),
substr(), printf(), time(), date(), etc.) o pueden realizarse funciones definidas por el usuario.
Las funciones incorporadas del lenguaje se comportan de la forma predeterminada para la que fueron
creadas. Existen muchas funciones incorporadas o predefinidas en PHP. Algunas ya las hemos utilizado en
guías anteriores. Por ejemplo: gettype(), settype(), print(), printf(), substr(), date(), etc.
Las funciones definidas por el usuario, o personalizadas, son creadas por el programador y su funcionalidad
y utilidad dependen en gran medida de la habilidad del programador. La ventaja de las segundas es que el
programador posee un control completo sobre ellas, ya que puede hacer que una función se comporte
exactamente del modo que se desea.
Parámetros de las funciones
La información puede suministrarse a las funciones mediante la lista de parámetros, una lista de variables
y/o constantes separadas por comas.
PHP soporta pasar parámetros por valor (el comportamiento por defecto), por referencia, y parámetros por
defecto. Listas de longitud variable de parámetros sólo están soportadas en PHP4 y posteriores. Un efecto
similar puede conseguirse en PHP3 pasando un array de parámetros a la función:
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
Pasar parámetros por referencia
Por defecto, los parámetros de una función se pasan por valor (de manera que si se cambia el valor del
argumento dentro de la función, el valor pasado fuera de ella no se ve alterado). Si se desea permitir a una
función modificar el valor de sus parámetros, deben ser pasados por referencia.
Para hacer que una función pase sus parámetros por referencia existen dos métodos:
 Anteponiendo un símbolo de ampersand (&) al nombre del parámetro o argumento en la definición de la
función. Esto hará que siempre que se mande un parámetro a la función en la llamada, este será enviado
por referencia. Por ejemplo:
function add_some_extra(&$string){
$string .= ' y algo más.';
}
$str = ’Esto es una cadena, ’;
add_some_extra($str);
echo $str; // Saca ’Esto es una cadena, y algo más.’

Anteponer el símbolo de ampersand (&) al nombre del parámetro en la llamada a la función. Este método
se debe aplicar si se desea pasar una variable por referencia a una función que no toma el parámetro por
referencia por defecto; es decir, si no se especificó en la definición de la función.
$num = 10;
function called_function($number){
//En la declaración no indica que
//el parámetro sea por referencia
$number = $number +1;
echo $number, "\n";
}
called_function(&$num);
//Se le pasa el parámetro por
//referencia a la función
echo $num, "\n";
Parámetros por defecto
Lenguajes Interpretados en el Servidor
9
Guía # 3: Matrices y funciones en PHP
Una función puede definir valores por defecto para los parámetros escalares estilo C++. Esto significa que si
al llamar a una función, que requiere parámetros, estos no se especifican, se le asignará a estos un valor por
defecto. Veamos el siguiente ejemplo:
function makecoffee($type = "cappucino"){
return "Hacer una taza de $type.\n";
}
echo makecoffee();
//Se llama a la función sin indicar parámetro
echo makecoffee("espresso"); //Se llama a la función usando parámetro
La salida del fragmento anterior es:
Hacer una taza de cappucino.
Hacer una taza de expresso.
El valor por defecto tiene que ser una valor literal, y no una variable o miembro de una clase.
En PHP 4.0 también es posible especificar unset como parámetro por defecto. Esto significa que el argumento
no tomará ningún valor en absoluto si el valor no es suministrado.
Destacar que cuando se usan parámetros por defecto, estos tienen que estar a la derecha de cualquier
parámetro sin valor por defecto; de otra manera las cosas no funcionarán de la forma esperada. Considera el
siguiente fragmento de código:
function makeyogurt ($type = "acidophilus", $flavour) {
return "Haciendo un bol de $type $flavour.\n";
}
echo makeyogurt ("mora"); // No funcionará de la manera esperada
La salida del ejemplo anterior es:
Warning: Missing argument 2 in call to makeyogurt() in usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Haciendo un bol de mora.
Y ahora, compáralo con:
function makeyogurt ($flavour, $type = "acidophilus") {
return "Haciendo un bol de $type $flavour.\n";
}
echo makeyogurt ("mora"); // funciona como se esperaba
La salida de este ejemplo es:
Haciendo un bol de acidophilus mora.
Funciones variables
En la mayoría de casos las llamadas a función se realizan con el identificador de la función de forma directa,
sin embargo, en PHP es posible asignar el identificador a una variable de cadena y hacer que en la llamada a
función se utilice esta variable en lugar del nombre o identificador de la función. Por ejemplo:
$funcion = "potencia";
$valor = 3;
echo "$valor elevado al cuadrado es: " . $funcion(3) . "<br />";
//Definición de la función sqrt
function sqrt($numero){
return $numero * $numero;
}
Aunque este ejemplo es bastante trivial, el verdadero potencial de las funciones variables se puede
experimentar al realizar retrollamadas (callbacks), definiendo una matriz (array) con los nombres de varias
Lenguajes Interpretados en el Servidor
10
Guía # 3: Matrices y funciones en PHP
funciones haciendo que un ciclo o lazo recorra los nombres de las funciones para que realice cada una el
cálculo con uno o varios valores con las distintas funciones definidas. Por ejemplo:
$trigFunctions = array("sin", "cos", "tan"); //Funciones predefinidas PHP
$degrees = 30;
foreach($trigFunctions as $myfunction){
echo "\$myfunction(\$degrees) = " . $myfunction(deg2rad($degrees))
. "<br />";
}
Alcance
La palabra alcance hace referencia a las partes del programa que pueden tener acceso a una variable. La vida
de una variable es el tiempo durante el cual existe.
En PHP las variables pueden tener tres tipos de alcance:
a) Local.
Las variables locales son visibles dentro de una función y su vida acaba justo cuando la ejecución de la
función termina. Por defecto, todas las variables que se declaran dentro de una función son locales en la
función. Esto significa que estas variables no son accesibles desde fuera de la función y mueren cuando la
función termina.
Ejemplo:
<?php
//Variable global, visible afuera de las funciones
$friend = "Carlos";
function who(){
//Variable local que muere cuando acaba la función
$friend = "Juan";
printf("<p>Dentro de la función tu amigo es: %s.</p>", $friend);
}
//Llamada a la función who()
who();
printf("<p>Fuera de la función tu amigo es: %s.</p>", $friend);
?>
Al ejecutar el script obtenemos lo siguiente:
b) Global.
Las variables globales son visibles en todo un script, y normalmente no lo son para una función. Dentro
de una función no se puede acceder a las variables que se han declarado fuera de ella, a menos que la
pasemos por referencia a la función en forma de argumento. Otra forma de hacer que una función acceda
a una variable externa a la función es utilizando la palabra reservada global antes del nombre de la
variable.
Ejemplo: Usando argumento por referencia
<!DOCTYPE html>
<html lang="es">
<head>
<title>Argumento a función</title>
</head>
<body>
<?php
//function raise_sal(&$salary){
function raise_sal(&$salary){
//global $salary;
$salary *=
1.1;
}
Lenguajes Interpretados en el Servidor
11
Guía # 3: Matrices y funciones en PHP
$salary = 50000;
//raise_sal();
raise_sal($salary);
?>
¡Felicidades!, su nuevo salario es: . <?= "$" . $salary ?><br />
</body>
</html>
Al ejecutar el script obtenemos lo siguiente:
Ejemplo
<!DOCTYPE html>
<html lang="es">
<head>
<title>Argumento a función</title>
</head>
<body>
<?php
function raise_sal(){
$GLOBALS['salary'] *= 1.1;
}
$salary = 50000;
raise_sal();
?>
¡Felicidades!, su nuevo salario es: . <?= "$" . $salary ?><br />
</body>
</html>
El resultado es:
c)
Estático.
Las variables estáticas son locales en una función, pero retienen su valor entre distintas llamadas a la
misma. Una variable estática no es visible fuera de la función, pero no muere cuando la función acaba.
Cuando se inicializa una variable estática, esta no pierde su valor entre las distintas llamadas, recuerda el
valor que tenía en la llamada anterior. Estas variables mueren hasta que termina el script.
Ejemplo:
<?php
function trackname(){
static $count = 0;
$count++;
echo "<p>Has ingresado a esta página $count veces</p>";
}
//Invocar varias veces a la función trackname()
trackname();
trackname();
trackname();
trackname();
?>
El resultado es:
Lenguajes Interpretados en el Servidor
12
Guía # 3: Matrices y funciones en PHP
Funciones incorporadas de PHP
PHP proporciona un gran número de funciones incorporadas, que ya están
listas para su utilización inmediata. Lo único que debe hacerse es invocarlas,
para lo que necesitará conocer su sintaxis, los argumentos que requiere en la
llamada y el tipo de valor que devuelve para asignarlo a alguna variable u
operar con el resultado.
Entre los tipos de funciones más utilizados están:
 Funciones para manejo de caracteres.
En PHP existen funciones que permiten trabajar con cadenas de caracteres que podemos dividir en varias
subcategorías. Por ejemplo, funciones para limpiar espacios en blanco, como trim(), ltrim(), rtrim() o
chop(), funciones para cambiar de mayúsculas a minúsculas y viceversa, como strtolower() y strtoupper(),
funciones para obtener partes de una cadena o un indicador de posición de coincidencia de una subcadena
dentro de otra cadena; es decir obtener subcadenas de una cadena más larga, como substr(), strpos(),
strstr(), explode(), etc.
 Funciones de búsqueda, reemplazo y comparación en cadenas.
Estas funciones permiten realizar búsqueda de una cadena dentro de otra más larga, reemplazar ciertos
caracteres de una cadena por otros o comparar una cadena con otra, como htmlentities(), substr_replace(),
str_ireplace(), strcmp(), strncmp(), strcasecmp(), etc.
 Funciones de fecha y hora.
Estas funciones permiten trabajar con fechas en PHP, ya sea para obtener algo conocido como la marca de
tiempo de la era UNIX o para mostrar datos específicos de una fecha y hora, como el día, el mes, el año, la
hora, los minutos y hasta los segundos. Las funciones de fecha de PHP son, entre otras: time(), mktime(),
date(), checkdate(), date_default_timezone_get(), date_default_timezone_set(), etc.
 Funciones para manejo de archivos y directorios.
Otro conjunto de funciones útiles, en este caso para el manejo de archivos, son las funciones: fopen(),
fread(), fwrite(), feof(), fgetc(), fgets(), fputs(), fseek(), rewind(), ftell(), fclose(), etc.
 Funciones para manejo de expresiones regulares.
También existen algunas funciones de PHP relacionadas con el manejo de expresiones regulares. Entre
estas se pueden mencionar: preg_match(), preg_match_all(), preg_replace(), preg_split(), etc.
 Funciones para trabajo con bases de datos.
Las funciones para trabajar con bases de datos en PHP son diversas, dependiendo del tipo de gestor de
bases de datos con el que se desea conectar. Es así que PHP proporciona un amplio número de funciones
para trabajar con bases de datos MySQL, PostgreSQL, MSSQL e incluso Oracle, entre otras. En el caso de
MySQL se puede trabajar usando las extensiones de MySQLi que son las más recomendadas por su
rapidez
como
mysqli_connect(),
mysqli_query(),
mysqli_fetch_array(),
mysqli_fetch_assoc(),
mysqli_fetch_object, mysqli_errno(), etc.
Modularidad
En PHP es posible hacer uso de la característica de modularidad utilizando las sentencias include() o require()
para implementar la reutilización del código definido en archivos con código PHP. La sintaxis de estas
sentencias son las siguientes:
Lenguajes Interpretados en el Servidor
13
Guía # 3: Matrices y funciones en PHP
include('nombre_de_archivo');
----------------------------require('nombre_de_archivo');
NOTA: Los paréntesis son opcionales. Si no se incluyen debe dejar espacio entre la palabra reservada include|require
y el delimitador de cadena, que puede ser comilla simple o doble.
En la sintaxis anterior ‘nombre_de_archivo’ es el nombre del archivo que se desea incluir o evaluar dentro del script
que utiliza esta sentencia.
La modularidad permite que se pueda dividir un script en scripts más pequeños y manejables que permitan
realizar modificaciones de forma más rápida y ordenada; es decir, si en algún momento debe hacerse un
cambio importante en un sitio creado con PHP, la modularidad permitiría modificar lo menos posible los
scripts de la aplicación. Debería ser en la mayoría de los casos un sólo script el que debería de modificarse.
Esto es una enorme ventaja para el programador.
III. MATERIALES Y EQUIPO
Para la realización de la guía de práctica se requerirá lo siguiente:
No. Material
1
Guía de práctica #3: Matrices y funciones en PHP
2
Computadora con WampServer, Sublime Text y PHP Designer instalados
3
Memoria USB o disco flexible
Cantidad
1
1
1
IV. PROCEDIMIENTO
Indicaciones: Asegúrese de digitar el código de los siguientes ejemplos que se presentan a continuación.
Tenga en cuenta que el PHP Designer no es compilador solamente un editor. Por lo tanto, los errores de
sintaxis los podrá observar únicamente hasta que se ejecute el script cargando la página en el navegador de su
preferencia.
Ejercicio #1: El siguiente ejemplo muestra una lista de estudiantes y su nota registrada en una matriz
asociativa, mostrando cómo recorrer los elementos de una matriz haciendo uso de la sentencia foreach.
Archivo 1: notasalumnos.php
<?php
$nombres = array(
'Claudia Salazar' => 6.4,
'Lorena López' => 6.3,
'Carlos Ávalos' => 7.5,
'Jennifer Vásquez' => 6.2,
'Roxana Calderón' => 7.5,
'Pedro Hidalgo' => 5.8,
'Morena Barraza' => 6.0,
'Beatriz Hernández' => 5.0,
'Alberto Figueroa' => 9.5,
'Julia García' => 8.5,
'Ileana Dominguez' => 8.2,
'Oscar Reyes' => 8.5,
'Lorena Linares' => 4.8,
'Ramiro Zepeda' => 5.5,
'Luis Peñate' => 9.6,
'José Menjivar' => 6.0,
'Sonia Leiva' => 5.1,
'Ernesto Fuentes' => 6.0,
'Claudia Ponce' => 6.8,
Lenguajes Interpretados en el Servidor
14
Guía # 3: Matrices y funciones en PHP
'Cristina Morales' => 7.6,
'Javier Hurtado' => 7.0
);
echo "<!DOCTYPE html>";
echo "<html>\n";
echo "<head>\n";
echo "\t<title>Uso del foreach para recorrer una matriz</title>\n";
echo
"\t<link
type=\"text/css\"
rel=\"stylesheet\"
href=\"css/notasalumnos.css\" />\n";
echo "</head>\n";
echo "<body>\n";
echo "<header>\n";
echo "\t<h1>Notas de los estudiantes</h1><hr>\n";
echo "</header>\n";
echo "<section>\n";
echo "<article>\n";
echo "\t<table>\n";
echo "\t\t<thead>\n";
echo "\t\t\t<tr>\n";
echo "\t\t\t\t<th>\n";
echo "\t\t\t\t\tNombre\n";
echo "\t\t\t\t</th>\n";
echo "\t\t\t\t<th>\n";
echo "\t\t\t\t\tCUM\n";
echo "\t\t\t\t</th>\n";
echo "\t\t\t</tr>\n";
echo "\t\t</thead>\n";
echo "\t\t<tbody>\n";
foreach($nombres as $name => $nota){
echo "\t\t\t<tr>\n";
echo "\t\t\t\t<td>\n";
echo "\t\t\t\t\t$name\n</td>\n";
echo "\t\t\t\t<td class=\"cum\">\n";
echo "\t\t\t\t\t" . number_format($nota, 1, '.', ',') . "\n";
echo "\t\t\t\t</td>\n";
echo "\t\t\t</tr>\n";
}
echo "\t\t</tbody>\n";
echo "\t</table>\n";
echo "</article>\n";
echo "</section>\n";
echo "</body>\n";
echo "</html>";
?>
media=\"screen\"
Archivo 2: notasalumnos.css
body {
background-color:#6cbd70;
filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#6cbd70,
endColorstr=#b086ab);
background-image:-moz-linear-gradient(top, #6cbd70 0%, #b086ab 100%);
background-image:-webkit-linear-gradient(top, #6cbd70 0%, #b086ab 100%);
background-image:-ms-linear-gradient(top, #6cbd70 0%, #b086ab 100%);
background-image:linear-gradient(top, #6cbd70 0%, #b086ab 100%);
background-image:-o-linear-gradient(top, #6cbd70 0%, #b086ab 100%);
background-image:-webkit-gradient(linear, right top, right bottom, colorstop(0%,#6cbd70), color-stop(100%,#b086ab));
}
h1
{
font:bold 20pt "Myriad Pro","Bodoni MT Black",Rockwell,Helvetica,sans-serif;
Lenguajes Interpretados en el Servidor
15
Guía # 3: Matrices y funciones en PHP
color:#033006;
text-align:center;
}
table
{
border-collapse:collapse;
border:8px outset DarkSlateBlue;
left:-10%;
margin-left:50%;
position:relative;
width:20%;
}
tr
{
border:1px solid DarkSlateBlue;
}
th
{
border:1px solid DarkSlateBlue;
background-color:rgb(0,100,100);
color:Gold;
font:bold 12pt "Lucida Sans","Century Gothic",Helvetica,sans-serif;
line-height:1.4em;
text-align:center;
}
td
{
color:rgb(60,0,90);
font:normal 11pt "Century Gothic","Lucida Sans",Helvitica,sans-serif;
}
tr:hover
{
background-color:#f5f59d;
filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#f5f59d,
endColorstr=#e4f222);
background-image:-moz-linear-gradient(top, #f5f59d 0%, #e4f222 100%);
background-image:-webkit-linear-gradient(top, #f5f59d 0%, #e4f222 100%);
background-image:-ms-linear-gradient(top, #f5f59d 0%, #e4f222 100%);
background-image:linear-gradient(top, #f5f59d 0%, #e4f222 100%);
background-image:-o-linear-gradient(top, #f5f59d 0%, #e4f222 100%);
background-image:-webkit-gradient(linear, right top, right bottom, colorstop(0%,#f5f59d), color-stop(100%,#e4f222));
color: rgb(60,0,90);
font-weight: Bold;
}
.cum
{
text-align:center;
}
Ejercicio #2: El siguiente ejercicio permite crear una serie de letras o números dependiendo de la selección
del usuario en un control de menú desplegable. Para crear la serie generado se utiliza la función range(),
proporcionando todos argumentos: el valor inicial y final de la serie, así como, el desplazamiento para la
secuencia de cada elemento.
Archivo 1: series.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Uso de la función range</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/series.css" />
Lenguajes Interpretados en el Servidor
16
Guía # 3: Matrices y funciones en PHP
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
</body>
<header>
<h1>Generación de series con función de matrices</h1>
</header>
<section>
<article>
<form action="series.php" method="POST">
<fieldset>
<legend>Tipos de series</legend>
<label for="seltipo">Escoja el tipo de serie:</label>
<select name="seltipo">
<option value="AlfabetoMin" selected="selected">Alfabeto en
minúsculas</option>
<option value="AlfabetoMay">Alfabeto en mayúsculas</option>
<option value="NumerosPares">Números pares</option>
<option value="NumerosImpares">Números impares</option>
</select><br />
<input type="submit" name="enviar" value="Enviar">
</fieldset>
</form>
</article>
<article>
<?php
if(isset($_POST['enviar'])){
$tiposecuencia = isset($_POST['seltipo']) ? $_POST['seltipo'] : "";
switch($tiposecuencia){
case "AlfabetoMin":
$inicio = 'a';
$final = 'z';
$salto = '1';
break;
case "AlfabetoMay";
$inicio = 'A';
$final = 'Z';
$salto = '1';
break;
case "NumerosPares":
$inicio = '0';
$final = '50';
$salto = '2';
break;
case "NumerosImpares":
$inicio = '1';
$final = '50';
$salto = '2';
break;
}
$secuencia = range($inicio,$final,$salto);
foreach($secuencia as $letra)
echo "<span class=\"caracter\">" . $letra . "</span>  \n";
}
?>
</article>
</section>
</body>
</html>
Archivo 2: series.css
body
{
Lenguajes Interpretados en el Servidor
17
Guía # 3: Matrices y funciones en PHP
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0.52,
#FFF04A),color-stop(1, #FAFA82));
background-image: -o-linear-gradient(bottom, #FFF04A 52%, #FAFA82 100%);
background-image: -moz-linear-gradient(bottom, #FFF04A 52%, #FAFA82 100%);
background-image: -webkit-linear-gradient(bottom, #FFF04A 52%, #FAFA82 100%);
background-image: -ms-linear-gradient(bottom, #FFF04A 52%, #FAFA82 100%);
background-image: linear-gradient(to bottom, #FFF04A 52%, #FAFA82 100%);
}
h1
{
color: Brown;
font: bold 20pt "Myriad Pro","Bodoni MT Black",Rockwell,Helvetica,sans-serif;
text-align: center;
text-shadow: 5px 2px 2px rgba(90,42,35,0.75);
}
article
{
height: auto;
margin: 20px auto;
width: 44%;
}
fieldset
{
background-color:Lavender;
left:-18%;
margin-left:50%;
position:relative;
width:36%;
}
legend
{
color:Indigo;
font:bold 12pt "Lucida Sans","Calisto MT","Bodoni MT",Helvetica,sans-serif;
}
label
{
color:DarkGreen;
font:600 10.5pt "Lucida Sans","Bodoni MT",Helvetica,sans-serif;
}
.caracter
{
color:Indigo;
font:600 10pt "Lucida Sans Unicode",Georgia,Helvetica,sans-serif;
}
Ejercicio #3: El siguiente ejemplo muestra cómo recorrer y mostrar una matriz bidimensional asociativa
con ciclos foreach para mostrar en forma ordenada la información de cada registro en una tabla.
Archivo 1: registro.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Mi agenda</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/registro.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<header>
<h1>Estudiantes registrados</h1><hr />
</header>
<?php
$alumnos = array(
Lenguajes Interpretados en el Servidor
18
Guía # 3: Matrices y funciones en PHP
"registro 1" => array(
"carnet"
"nombre"
"apellido"
"telefono"
),
"registro 2" => array(
"carnet"
"nombre"
"apellido"
"telefono"
),
"registro 3" => array(
"carnet"
"nombre"
"apellido"
"telefono"
),
"registro 4" => array(
"carnet"
"nombre"
"apellido"
"telefono"
),
"registro 5" => array(
"carnet"
"nombre"
"apellido"
"telefono"
),
"registro 6" => array(
"carnet"
"nombre"
"apellido"
"telefono"
)
=>
=>
=>
=>
'EG070425',
'Mario Alexander',
'Erazo Gutiérrez',
'2221-0916'
=>
=>
=>
=>
'RD070316',
'Edgard Antonio',
'Rodríguez Durán',
'2221-0673'
=>
=>
=>
=>
'FS060546',
'Gerardo Arturo',
'Fonseca Saravia',
'2226-1539'
=>
=>
=>
=>
'SG063125',
'Ana Lilian',
'Santana Godínez',
'2292-0425'
=>
=>
=>
=>
'EJ052105',
'Clara Asunción',
'Escamilla Jovel',
'2221-1385'
=>
=>
=>
=>
'EJ052105',
'Pedro José',
'Cruz Rodríguez',
'2256-6340'
);
//Imprimir los elementos de la matriz
echo "<section>\n";
echo "\t<article>\n";
echo "\t\t<table>\n";
echo "\t\t\t<tr><th>Campo</th><th>Dato</th></tr>\n";
foreach($alumnos as $registro => $datos){
echo "\t\t\t<tr><th colspan=\"2\">$registro</th></tr>\n";
foreach($datos as $indice => $valor){
echo "\t\t\t<tr><td>$indice</td><td>$valor</td></tr>\n";
}
}
echo "\t\t</table>\n";
echo "\t</article>\n";
echo "</section>\n"
?>
</body>
</html>
Archivo 2: registro.css
*
{
border: 0;
margin: 0;
padding: 0;
}
Lenguajes Interpretados en el Servidor
19
Guía # 3: Matrices y funciones en PHP
body
{
background: rgba(188,235,203,1);
background: -moz-linear-gradient(-45deg, rgba(188,235,203,1) 0%, rgba(122,240,224,1)
100%);
background: -webkit-gradient(left top, right bottom, color-stop(0%,
rgba(188,235,203,1)), color-stop(100%, rgba(122,240,224,1)));
background: -webkit-linear-gradient(-45deg, rgba(188,235,203,1) 0%,
rgba(122,240,224,1) 100%);
background: -o-linear-gradient(-45deg, rgba(188,235,203,1) 0%, rgba(122,240,224,1)
100%);
background: -ms-linear-gradient(-45deg, rgba(188,235,203,1) 0%, rgba(122,240,224,1)
100%);
background: linear-gradient(135deg, rgba(188,235,203,1) 0%, rgba(122,240,224,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bcebcb',
endColorstr='#7af0e0', GradientType=1 );
}
h1
{
background-color:Brown;
border:2px double rgb(20,80,40);
color:rgb(200,250,180);
font:bold 22pt "Bodoni MT Black","Cooper Black",Helvetica,sans-serif;
text-align:center;
}
table
{
background-color:rgb(190,240,180);
border:5px groove Brown;
left:50%;
margin-left:-9%;
position:relative;
width:18%;
}
th
{
background-color:Orange;
border:3px solid BurlyWood;
font-family:Garamond;
font-size:11pt;
font-weight:800;
}
td
{
border:3px solid #a52a2a;
font-family:Georgia;
font-size:10pt;
font-weight:400;
}
Ejercicio #4: En este ejemplo se ingresan una serie de productos a través de un formulario. Los nuevos
productos se ingresan en un cuadro de texto y mediante un botón son agregados a un cuadro de lista.
Mediante un botón de envío los datos ingresados y seleccionados del cuadro de lista son enviados para
que sean procesados por el script PHP. La aplicación incluye un script .js que se encarga de la
funcionalidad de agregar productos al cuadro de lista.
Archivo 1: productos.html
<!DOCTYPE html>
<html lang="es">
<head>
<title>Listado de productos</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/productos.css" />
Lenguajes Interpretados en el Servidor
20
Guía # 3: Matrices y funciones en PHP
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
<script type="text/javascript" src="js/productos.js"></script>
</head>
<body>
<section>
<article>
<form name="frmproductos" action="productos.php" method="POST">
<fieldset>
<legend><span>Ingreso de productos:</span></legend>
<ul>
<li>
<label for="producto">Nuevo producto:</label>
<div class="campo">
<input type="text" name="producto" id="producto" maxlength="60"
placeholder="(Ingrese un producto)" />
<input type="reset" name="agregar" id="agregar" value="Agregar" />
</div>
</li>
<li>
<label for="ingresados">Productos ingresados:</label>
<div class="campo">
<select name="ingresados[]" id="ingresados" size="6"
multiple="multiple"></select>
</div>
</li>
<li>
<div class="campo">
<input type="submit" name="enviar" id="enviar" value="Enviar"
class="boton" />
</div>
</li>
</ul>
</fieldset>
</form>
</body>
</article>
</section>
</html>
Archivo 2: productos.js
window.onload = initForms;
function initForms(){
document.getElementById("agregar").onclick = function(){
addProducts(document.frmproductos.ingresados,
document.frmproductos.producto.value);
}
document.getElementById("enviar").onclick = function(){
var contador = 0;
for(var i=0; i<document.frmproductos.ingresados.options.length; i++){
if(document.frmproductos.ingresados.options[i].selected){
contador++;
}
}
if(contador == 0){
alert("No se han seleccionado elementos.");
return false;
}
}
}
function addProducts(optionMenu, value){
Lenguajes Interpretados en el Servidor
21
Guía # 3: Matrices y funciones en PHP
var posicion = optionMenu.length;
optionMenu[posicion] = new Option(value, value);
}
Archivo 3: productos.css
body
{
background-image: rgba(223,231,233,1);
background-image: -moz-linear-gradient(45deg, rgba(223,231,233,1) 0%,
rgba(112,180,207,1) 52%, rgba(79,154,186,1) 100%);
background-image: -webkit-gradient(left bottom, right top, color-stop(0%,
rgba(223,231,233,1)), color-stop(52%, rgba(112,180,207,1)), color-stop(100%,
rgba(79,154,186,1)));
background-image: -webkit-linear-gradient(45deg, rgba(223,231,233,1) 0%,
rgba(112,180,207,1) 52%, rgba(79,154,186,1) 100%);
background-image: -o-linear-gradient(45deg, rgba(223,231,233,1) 0%,
rgba(112,180,207,1) 52%, rgba(79,154,186,1) 100%);
background-image: -ms-linear-gradient(45deg, rgba(223,231,233,1) 0%,
rgba(112,180,207,1) 52%, rgba(79,154,186,1) 100%);
background-image: linear-gradient(45deg, rgba(223,231,233,1) 0%, rgba(112,180,207,1)
52%, rgba(79,154,186,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dfe7e9',
endColorstr='#4f9aba', GradientType=1 );
}
fieldset
{
background-color:rgb(190,220,230);
border:6px ridge rgb(50,100,150);
left:-23%;
margin-left:50%;
position:relative;
width:46%;
}
legend span
{
background-color:rgb(20,20,100);
border:3px ridge rgb(50,100,150);
color:rgb(225,250,250);
display:block;
font:bold 9pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
padding:2px 5px;
}
label
{
color:rgb(30,60,100);
display:block;
float:left;
font:normal 9pt "Arial Rounded MT Bold","Century Gothic",Helvetica,sans-serif;
padding-top:0.6em;
padding-bottom:0.6em;
text-align:right;
width:30%;
}
.campo
{
display:block;
float:right;
position:relative;
width:68%;
}
.boton
bottom:-0.2em;
{
Lenguajes Interpretados en el Servidor
22
Guía # 3: Matrices y funciones en PHP
display:block;
left:-2.5em;
margin-left:50%;
position:relative;
width:5em;
}
ul
{
list-style-type:none;
margin:0;
padding:0;
}
li
{
display:block;
line-height:2.1em;
}
table
{
border:8px groove rgb(100,10,5);
border-collapse:collapse;
position:relative;
left:-9%;
margin-left:50%;
width:18%;
}
tr
{
border:1px solid rgb(120,20,20);
}
th
{
background-color:rgb(90,5,3);
color:rgb(250,240,200);
font:bold 14pt Garamond,Helvetica,sans-serif;
}
td
{
background-color:rgb(250,240,200);
color:rgb(100,10,10);
font:normal 14pt Garamond,Helvetica,sans-serif;
}
Archivo 4: productos.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Productos de la tienda</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/productos.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<section>
<article>
<table>
<thead>
<th class="head">Productos</th>
</thead>
<tbody>
<?php
if(isset($_POST['enviar'])){
if(isset($_POST['ingresados'])){
Lenguajes Interpretados en el Servidor
23
Guía # 3: Matrices y funciones en PHP
foreach($_POST["ingresados"] as $productos){
echo "<tr>\n<td>$productos</td>\n</tr>";
}
}
}
?>
</tbody>
</table>
</article>
</section>
</body>
</html>
Ejercicio #5: El siguiente ejemplo muestra el uso de la función array_rand() de PHP que permite generar
un número de índices aleatorios para mostrar las imágenes de películas de la portada. Luego, se puede
seleccionar un nombre de película y la cantidad de boletos de entrada que se desean adquirir. Al enviar el
formulario y utilizando una matriz bidimensional asociativa se puede crear un boleto que indica el precio
a pagar por el número de entradas adquirido.
Archivo 1: cartelera.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Cartelera de cine</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/cartelera.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<header>
<h1>Cartelera de cine</h1>
</header>
<section>
<?php
//Creamos una variable con el directorio o carpeta que contiene las imágenes
$dir = "img";
//Creamos una matriz con los nombres de las imágenes que se almacenan en el directorio
$peliculas = array(
"al-diablo-con-el-diablo.jpg", "click.jpg",
"cruzada.jpg", "efecto-mariposa.jpg",
"busca-de-la-felicidad.jpg", "amenaza-fantasma.jpg",
"la-milla-verde.jpg", "la-propuesta.jpg",
"comunidad-del-anillo.jpg", "sexto-sentido.jpg"
);
//Obtener cuatro claves de la matriz $peliculas
$claves = array_rand($peliculas, 4);
//Creando una estructura de 3 columnas con elementos DIV
?>
<article>
<img src="<?php echo $dir . "/" . $peliculas[$claves[0]]; ?>" width="200" /><br />
<img src="<?php echo $dir . "/" . $peliculas[$claves[1]]; ?>" width="200" />
</article>
<article>
<hgroup>
<h2>CINE REFORMA</h2>
<h3>Los mejores estrenos los encuentras aquí</h3>
<h4>Estas son las películas en cartelera</h4>
</hgroup>
<div id="">
<form action="pagoentrada.php" method="POST">
<fieldset>
<legend><span>Entrada al cine</span></legend>
Lenguajes Interpretados en el Servidor
24
Guía # 3: Matrices y funciones en PHP
<label for="pelicula">Película</label>
<select name="pelicula" id="pelicula">
<option value="mov0001" selected="selected">Al diablo con el
diablo</option>
<option value="mov0002">Click</option>
<option value="mov0003">Cruzada</option>
<option value="mov0004">El efecto mariposa</option>
<option value="mov0005">En busca de la felicidad</option>
<option value="mov0006">La amenaza fastasma</option>
<option value="mov0007">Milagros inesperados</option>
<option value="mov0008">La propuesta</option>
<option value="mov0009">La comunidad del anillo</option>
<option value="mov0010">El sexto sentido</option>
</select><br />
<label for="cantidad">Cantidad</label>
<input type="text" name="cantidad" id="cantidad" maxlength="1"
placeholder="Cantidad" pattern="\d{1}" required /><br />
<input type="submit" name="comprar" value="Comprar" />
</fieldset>
</form>
</div>
</article>
<article>
<img src="<?php echo $dir . "/" . $peliculas[$claves[2]]; ?>" width="200" /><br />
<img src="<?php echo $dir . "/" . $peliculas[$claves[3]]; ?>" width="200" />
</article>
</section>
</body>
</html>
Archivo 2: cartelera.css
body
font: 16px;
}
h1
{
{
font: 2.2em Bold Geneva,Helvetica,sans-serif;
margin: 2% auto;
text-align: center;
text-shadow: 5px 2px 2px rgba(90,42,35,0.75);
}
hgroup h2
{
font: 1.75em Bold Verdana,Helvetica,sans-serif;
text-align: center;
}
section
{
background: -moz-linear-gradient(top, rgba(243,226,199,0.93) 0%, rgba(243,226,199,0.93)
1%, rgba(233,212,179,.93) 5%, rgba(182,141,76,1) 100%); /*FF3.6+*/
background: -webkit-gradient(linear, left top, left bottom, colorstop(0%,rgba(243,226,199,0.93)), color-stop(1%,rgba(243,226,199,0.93)), colorstop(5%,rgba(233,212,179,0.93)), color-stop(100%,rgba(182,141,76,1))); /* Chrome,Safari4+
*/
background: -webkit-linear-gradient(top, rgba(243,226,199,0.93)
0%,rgba(243,226,199,0.93) 1%,rgba(233,212,179,0.93) 5%,rgba(182,141,76,1) 100%); /*
Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(243,226,199,0.93) 0%,rgba(243,226,199,0.93)
1%,rgba(233,212,179,0.93) 5%,rgba(182,141,76,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(243,226,199,0.93) 0%,rgba(243,226,199,0.93)
1%,rgba(233,212,179,0.93) 5%,rgba(182,141,76,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(243,226,199,0.93)
Lenguajes Interpretados en el Servidor
25
Guía # 3: Matrices y funciones en PHP
0%,rgba(243,226,199,0.93) 1%,rgba(233,212,179,0.93) 5%,rgba(182,141,76,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#edf3e2c7',
endColorstr='#b68d4c',GradientType=0 ); /* IE6-9 */
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
-o-border-radius: 15px;
-ms-border-radius: 15px;
border-radius: 15px;
behavior:url(css/border-radius.htc);
margin: 2% auto;
vertical-align: top;
width: 98%;
}
article
{
/* border: 1px solid Blue; */
display: inline-block;
margin: 0 2%;
min-height: 560px;
padding-left: 4%;
padding-top: 2%;
padding-bottom: 2%;
vertical-align: top;
width: 25%;
}
article img
{
display: block;
-moz-box-shadow: 3px 3px 3px 3px rgba(100,50,40,0.75);
-webkit-box-shadow: 3px 3px 3px 3px rgba(100,50,40,0.75);
-o-box-shadow: 3px 3px 3px 3px rgba(100,50,40,0.75);
-ms-box-shadow: 3px 3px 3px 3px rgba(100,50,40,0.75);
box-shadow: 3px 3px 3px 3px rgba(100,50,40,0.75);
}
/* Estilos para el formulario */
form
{
margin:auto;
width:286px;
padding:12px;
border:1px solid #270644;
/* Agregando propiedades CSS3 */
-ms-border-radius:12px;
-moz-border-radius:12px;
-webkit-border-radius:12px;
-khtml-border-radius:12px;
border-radius:12px;
behavior:url(css/border-radius.htc);
/* Color de fondo del formulario con degradado con gradiente */
background: rgb(239,197,202); /* Old browsers */
background: -moz-linear-gradient(45deg, rgba(239,197,202,1) 0%, rgba(241,142,153,1)
3%, rgba(210,75,90,1) 37%, rgba(186,39,55,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left bottom, right top, colorstop(0%,rgba(239,197,202,1)), color-stop(3%,rgba(241,142,153,1)), colorstop(37%,rgba(210,75,90,1)), color-stop(100%,rgba(186,39,55,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(45deg, rgba(239,197,202,1) 0%,rgba(241,142,153,1)
3%,rgba(210,75,90,1) 37%,rgba(186,39,55,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(45deg, rgba(239,197,202,1) 0%,rgba(241,142,153,1)
3%,rgba(210,75,90,1) 37%,rgba(186,39,55,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(45deg, rgba(239,197,202,1) 0%,rgba(241,142,153,1)
3%,rgba(210,75,90,1) 37%,rgba(186,39,55,1) 100%); /* IE10+ */
background: linear-gradient(45deg, rgba(239,197,202,1) 0%,rgba(241,142,153,1)
Lenguajes Interpretados en el Servidor
26
Guía # 3: Matrices y funciones en PHP
3%,rgba(210,75,90,1) 37%,rgba(186,39,55,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efc5ca',
endColorstr='#ba2737',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
/* Sombra a los costados de las cajas */
box-shadow:0px -5px 300px #270644;
-ms-box-shadow:0px -5px 300px #270644;
-moz-box-shadow:0px -5px 300px #270644;
-webkit-box-shadow:0px -5px 300px #270644;
}
legend
{
display: block;
color: #F0E68C;
font: Bold 1em Linotype,sans-serif;
width: 124px;
padding: 5px;
}
label
{
display:block;
color: #F0E68C;
font: Bold 0.9em Linotype,sans-serif;
width: 60px;
padding: 6px;
/* border: 1px solid White; */
}
input, select
{
width: 250px;
background: #8a33c6;
padding: 6px;
margin-bottom: 10px;
border-top: 1px solid #808080;
border-left: 1px solid #808080;
border-right: 1px solid #AD64E0;
border-bottom: 1px solid #AD64E0;
/* Agregando propiedades CSS3 */
-webkit-transition-property: -webkit-box-shadow, background;
-webkit-transition-duration: 0.25s;
-moz-box-shadow: 0px 0px 2px #000;
-webkit-box-shadow: 0px 0px 2px #000;
}
input[type=text]
{
font: Normal 1em Palatino,Helvetica,sans-serif;
background: #DEB887;
color: #8B0000;
}
select
{
font: Normal 1em Palatino,Helvetica,sans-serif;
background: #DEB887;
color: #8B0000;
}
input[type=submit]
{
background-color:#A0522D;
color:#DEB887;
border-top: 2px solid #F5DEB3;
border-left: 2px solid #F5DEB3;
border-right: 2px solid #BC8F8F;
border-bottom: 2px solid #BC8F8F;
Lenguajes Interpretados en el Servidor
27
Guía # 3: Matrices y funciones en PHP
text-transform:uppercase;
font:Bold 1em Linotype,sans-serif;
}
input[type=submit]:hover {
background: #905020;
color: #DFBCA7;
}
input:hover
{
-webkit-box-shadow: 0px 0px 4px #000;
background: #A0522D;
}
select:hover
{
-webkit-box-shadow: 0px 0px 4px #000;
background: #A0522D;
}
Archivo 3: pagoentrada.php
<!DOCTYPE html>
<html>
<head>
<title>Boleto de entrada</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/tables.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<?php
$peliculas = array(
"mov0001" => array(
"titulo" => "Al diablo con el diablo",
"precio" => 3.75,
"sala" => "Sala 1",
"hora" => "7:00 pm"
),
"mov0002" => array(
"titulo" => "Clic",
"precio" => 3.75,
"sala" => "Sala 3",
"hora" => "5:00 pm"
),
"mov0003" => array(
"titulo" => "Cruzada",
"precio" => 3.00,
"sala" => "Sala 2",
"hora" => "1:00 pm"
),
"mov0004" => array(
"titulo" => "El efecto mariposa",
"precio" => 3.75,
"sala" => "sala 3",
"hora" => "6:00 pm"
),
"mov0005" => array(
"titulo" => "En busca de la felicidad",
"precio" => 3.00,
"sala" => "Sala 5",
"hora" => "3:00 pm"
),
"mov0006" => array(
"titulo" => "La amenaza fastasma",
Lenguajes Interpretados en el Servidor
28
Guía # 3: Matrices y funciones en PHP
"precio" => 3.75,
"sala" => "sala 4",
"hora" => "6:00 pm"
),
"mov0007" => array(
"titulo" => "Milagros inesperados",
"precio" => 3.75,
"sala" => "Sala 2",
"hora" => "1:00 pm"
),
"mov0008" => array(
"titulo" => "La propuesta",
"precio" => 3.75,
"sala" => "sala 1",
"hora" => "9:00 pm"
),
"mov0009" => array(
"titulo" => "La comunidad del anillo",
"precio" => 3.75,
"sala" => "Sala 5",
"hora" => "7:00 pm"
),
"mov0010" => array(
"titulo" => "El sexto sentido",
"precio" => 3.75,
"sala" => "sala 3",
"hora" => "8:45 pm"
)
);
//Procesando los datos enviados del formulario
if(isset($_POST['comprar'])){
$movie = isset($_POST['pelicula']) ? $_POST['pelicula'] : "";
switch($movie){
case "mov0001":
$seleccionada = $peliculas["mov0001"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0002":
$seleccionada = $peliculas["mov0002"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0003":
$seleccionada = $peliculas["mov0003"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0004":
$seleccionada = $peliculas["mov0004"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0005":
$seleccionada = $peliculas["mov0005"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0006":
$seleccionada = $peliculas["mov0006"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
Lenguajes Interpretados en el Servidor
29
?
?
?
?
?
?
Guía # 3: Matrices y funciones en PHP
break;
case "mov0007":
$seleccionada = $peliculas["mov0007"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0008":
$seleccionada = $peliculas["mov0008"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0009":
$seleccionada = $peliculas["mov0009"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
case "mov0010":
$seleccionada = $peliculas["mov0010"];
$cantidad = (isset($_POST['cantidad']) && is_numeric($_POST['cantidad']))
$_POST['cantidad'] : 0;
break;
}
//Iniciando la tabla con la información de la película seleccionada
?>
<section>
<article>
<table id="hor-zebra" summary="Datos recibidos del formulario">
<caption>Información de formulario</caption>
<thead>
<tr class="thead">
<th scope="col" colspan="2">Boleto de entrada</th>
</tr>
</thead>
<tbody>
<?php
//Obtiniendo los datos de la película seleccionada que está almacenada en
$seleccionada
$table = "";
$i = 1;
foreach($seleccionada as $indice => $dato){
if($i%2 != 0){
$table .= "\t<tr class=\"odd\">\n";
}
else{
$table .= "\t<tr class=\"even\">\n";
}
if($indice == "precio"){
$dato *= $cantidad;
$dato = "\$" . number_format((double)$dato, 2, ".", ",");
}
$table .= "\t\t<td>$indice</td>\n";
$table .= "\t\t<td> $dato</td>\n\t</tr>\n";
$i++;
}
echo $table;
}
?>
</tbody>
</table>
<a href="cartelera.php">Ingresar otra película</a>
</article>
</section>
</body>
Lenguajes Interpretados en el Servidor
30
?
?
?
?
Guía # 3: Matrices y funciones en PHP
</html>
Archivo 4: tables.css
body
{
line-height: 1.6em;
}
caption
{
font: Bold 1.25em "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
color: rgb(100,50,40);
}
/* Estilos ocupados en el ejemplo de formularios */
#hor-zebra
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
margin: 45px;
width: 480px;
text-align: left;
border-collapse: collapse;
}
#hor-zebra th
{
font-size: 14px;
font-weight: normal;
padding: 10px 8px;
color: #039;
}
#hor-zebra td
{
padding: 8px;
color: rgb(100,50,40);
}
#hor-zebra .thead
{
background-color: rgb(100,50,40);
}
#hor-zebra .thead th
{
padding: 10px 8px;
color: #FFDEAD;
font:Bold 12px "Lucida Sans Unicode", Helvetica, Sans-Serif;
}
#hor-zebra .odd
{
background-color: #F0E68C;
}
#hor-zebra .even
{
background-color: #F9EC96;
}
Ejercicio #6: El siguiente ejemplo muestra cómo generar una tabla de multiplicar solicitando el número de
la tabla al usuario a través de un formulario. Se valida el valor numérico que el usuario ingresa haciendo
uso de validación en el cliente con JavaScript.
Archivo 1: entrada.html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Introducción de datos</title>
Lenguajes Interpretados en el Servidor
31
Guía # 3: Matrices y funciones en PHP
<link type="text/css" rel="stylesheet" media="screen" href="css/form.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
<script type="text/javascript" src="js/validar.js"></script>
</head>
<body>
<header>
<h1 align="center">Ejemplo de uso de Función</h1>
<hr />
</header>
<section>
<article>
<form method="POST" action="tabla.php" enctype="multipart/form-data"
name="frmingreso" id="frmingreso">
<fieldset>
<legend><span>Cálculo del factorial</span></legend>
<ul>
<li class="campo">
<label for="txtnumero">Número: </label>
<input type="text" name="txtnumero" id="txtnumero" maxlength="3"
placeholder="(Ingrese un número entero)" pattern="[0-9]{1,3}" required="required" /><br />
<span id="numbersOnly">Ingrese números</span>
</li>
<li class="campo">
<input type="submit" name="enviar" value="Mostrar" class="boton"
/> 
<input type="reset" name="limpiar" value="Cancelar" class="boton"
/>
</li>
</ul>
</fieldset>
</form>
</article>
</section>
</body>
</html>
Archivo 2: form.css
fieldset
{
background-color:rgb(190,220,230);
border:6px ridge rgb(50,100,150);
left:-16%;
margin-left:50%;
position:relative;
width:32%;
}
legend span
{
background-color:rgb(20,20,100);
border:3px ridge rgb(50,100,150);
color:rgb(225,250,250);
display:block;
font:Bold 9pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
padding:2px 5px;
}
label
{
color:rgb(30,60,100);
display:block;
float:left;
font:normal 9pt "Arial Rounded MT Bold","Century Gothic",Helvetica,sans-serif;
padding-bottom:0.6em;
padding-top:0.6em;
Lenguajes Interpretados en el Servidor
32
Guía # 3: Matrices y funciones en PHP
text-align:right;
width:30%;
}
.campo
{
display:block;
float:right;
position:relative;
width:68%;
}
.boton
{
background:rgb(50,50,120);
border:3px outset rgb(60,50,60);
bottom:-0.2em;
color:Yellow;
display:inline;
font:Bold 9pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
position:relative;
}
.boton:hover
{
background:rgb(90,90,150);
color:White;
}
#numbersOnly
{
background:Orange;
border:3px ridge rgb(50,50,120);
color:White;
font:Bold 8pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
visibility:hidden;
}
ul
{
list-style-type:none;
margin:0;
padding:0;
}
li
{
display:block;
line-height:2.1em;
}
Archivo 3: tabla.css
#tablamulti, #enlace {
margin:0 auto;
width:18%;
}
#enlace
{
font:normal 12pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
text-align:center;
}
caption
{
color:rgb(30,30,30);
font:bold 11pt "Lucida Sans",Tahoma,Helvetica,sans-serif;
padding-bottom:6px;
padding-top:6px;
text-align:center;
Lenguajes Interpretados en el Servidor
33
Guía # 3: Matrices y funciones en PHP
}
table
{
border:3px groove rgb(111,3,6);
border-collapse:collapse;
}
th
{
background-color:rgb(233,122,155);
border:2px solid rgb(111,5,9);
border-collapse:collapse;
font:bold 12pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
text-align:center;
}
td
{
border-collapse:collapse;
border:2px solid rgb(111,5,9);
background-color:rgb(225,225,225);
text-align:center;
font:normal 11pt "Lucida Sans",Tahoma,Helvetica,sans-serif;
}
Archivo 4: tabla.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Tablas de multiplicar</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/tabla.css" />
</head>
<body>
<section>
<article>
<?php
function escribir_tabla(){
$num = (isset($_POST['txtnumero']) && is_int(intval($_POST['txtnumero']))) ?
$_POST['txtnumero'] : 0;
if($num != 0){
echo "<div id=\"tablamulti\">\n";
echo "<table>\n";
echo "<caption>Tabla del $num</caption>\n";
echo "<thead>\n<tr>\n<th colspan=\"3\">\n";
echo "Tabla del número $num\n";
echo "</th>\n</thead>\n";
echo "<tbody>\n";
for($i=1; $i<=20; $i++){
echo "<tr>\n";
echo "<td>", $num, " * ", $i, "</td>\n";
echo "<td> = </td>\n";
echo "<td>", $num*$i, "</td>\n";
echo "</tr>\n";
}
echo "</tbody>\n";
echo "</table>\n";
echo "</div>\n";
}
else{
die(
"<p class=\"error\">El valor ingresado debe ser un número entero mayor
que cero.</p>\n
<div id=\"enlace\">\n<a href=\"entrada.html\">Regresar</a>\n</div>\n"
);
Lenguajes Interpretados en el Servidor
34
Guía # 3: Matrices y funciones en PHP
}
}
escribir_tabla();
echo "<div id=\"enlace\">\n<a href=\"entrada.html\">Regresar</a>\n</div>\n";
?>
</article>
</section>
</body>
</html>
Archivo 5: validar.js
(function(){
//Agregar al manejador de evento load la función init())
if (window.addEventListener) window.addEventListener("load", init, false);
else if (window.attachEvent) window.attachEvent("onload", init);
// Buscar en el documento todos los elementos INPUT de tipo texto, ya que
// solamente en ellos se va a registrar un controlador de evento.
function init(){
var inputtag = document.getElementById("txtnumero");
// Hacer un recorrido por todos los campos del formulario
if (inputtag.addEventListener){
inputtag.addEventListener("keypress", filter, false);
}
else {
// No utilizamos attachEvent porque no llama a la función de controlador
// con el valor correcto de la palabra clave this. En su lugar se invova
// con el manejador de evento onkeypress
inputtag.onkeypress = filter;
}
}
// Este es el controlador keypress que filtra la entrada del usuario
function filter(event) {
// Obtener el objeto event y el código de carácter de la tecla pulsada
// de forma compatible con todos los navegadores
var e = event || window.event;
// Objeto de evento de la tecla
var code = e.charCode || e.keyCode;
// tecla que se ha pulsado
//
if
if
if
Si se ha pulsado una tecla de función de cualquier tipo, no filtrarla
(e.charCode == 0) return true;
// Tecla de función (solo para Firefox)
(e.ctrlKey || e.altKey) return true; // Se mantienen presionadas Ctrl o Alt
(code < 32) return true;
// Carácter de Ctrl en tabla ASCII
// Dejar pasar teclas de retroceso (BackSpace), tabulación (Tab), entrada (Enter),
// escape (Scape) y espacios en blanco (SpaceBar)
if (code==0 || code==8 || code==9 || code==13 || code==27 || code==32) return
true;
// Buscar la información de los caracteres válidos para este campo de entrada
var allowed = "0123456789";
// Caracteres válidos
var messageElement = document.getElementById("numbersOnly"); // Mensaja a
ocultar/mostrar
// Convertir el código de carácter a su carácter correspondiente
var c = String.fromCharCode(code);
// Comprobar si el carácter está dentro del conjunto de caracteres permitidos
if (allowed.indexOf(c) != -1) {
// Si c es un carácter legal, ocultar el mensaje, si es que existe.
if (messageElement) messageElement.style.visibility = "hidden";
return true; // Aceptar el carácter
Lenguajes Interpretados en el Servidor
35
Guía # 3: Matrices y funciones en PHP
}
else {
// Si c no está en el conjunto de caracteres permitidos, mostrar el mensaje
if (messageElement) messageElement.style.visibility = "visible";
// Y rechazar este evento keypress
if (e.preventDefault) e.preventDefault();
if (e.returnValue) e.returnValue = false;
return false;
}
}
})();
Ejercicio #7: El siguiente ejemplo muestra cómo generar la serie de Fibonacci solicitando al usuario el
número de términos de la serie generada. Este dato es validado en el cliente y en el servidor.
Archivo 1: fibonacci.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Serie de Fibonacci</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/form.css" />
<link type="text/css" rel="stylesheet" media="screen" href="css/niko.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
<script type="text/javascript" src="js/validar.js"></script>
</head>
<body>
<section>
<article>
<h2>Serie de Fibonacci con recursividad</h2>
<?php
if(isset($_GET['enviar'])):
//Función de Fibonacci recursiva
function fibonacci($n){
if(($n == 0) || ($n == 1)) return $n;
return fibonacci($n - 2) + fibonacci($n - 1);
}
//Verificando el correcto ingreso de los datos
$numero1 = isset($_GET['txtnumero']) ? $_GET['txtnumero'] : -1;
if($numero1 == -1):
$backlink = "<p>El valor del campo no es válido</p>\n";
$backlink .= "<a href=\"{$_SERVER['PHP_SELF']}\" title=\"Regresar\">\n";
$backlink .= "Ingresar dato nuevamente\n</a>\n";
echo $backlink;
exit(0);
endif;
$tabla = "<table>\n";
$tabla .= "<caption>Generando serie de Fibonacci</caption>\n";
$tabla .= "<thead>\n\t";
$tabla .= "<tr>\n\t\t<th scope=\"col\">\n\t\t\tSecuencia\n\t\t</th>\n\t\t";
$tabla .= "<th scope=\"col\">\n\t\t\tValor\n\t\t</th>\n";
$tabla .= "<thead>\n";
$tabla .= "<tbody>\n\t";
$i = 0;
while($i <= $numero1){
$class = $i%2 == 0 ? "odd" : "even";
$tabla .= "<tr
class=\"$class\">\n\t\t<td>\n\t\t\tF<sub>$i</sub>\n\t\t</td>\n";
$tabla .= "\n\t\t<td>\n\t\t\t" . fibonacci($i) . "\n\t\t</td>\n</tr>\n";
$i++;
Lenguajes Interpretados en el Servidor
36
Guía # 3: Matrices y funciones en PHP
}
$tabla .= "<tbody>\n</table>\n";
echo $tabla;
echo "<br />\n<a href=\"{$_SERVER['PHP_SELF']}\" title=\"Regresar\">";
echo "Ingresar nuevos datos</a>";
else:
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="GET">
<fieldset>
<legend><span>Serie de Fibonacci</span></legend>
<ul>
<li class="campo">
<label for="numero1">Valores para serie: </label>
<input type="text" name="txtnumero" id="txtnumero" size="4"
maxlength="3" pattern="[0-9]{1,3}" required />
<span id="numbersOnly">Ingrese números</span>
</li>
<li class="campo">
<input type="submit" name="enviar" value="Generar" class="boton"
/> 
<input type="reset" name="limpiar" value="Cancelar" class="boton"
/>
</li>
</ul>
</fieldset>
</form>
<?php endif; ?>
</article>
</section>
</body>
</html>
Archivo 2: niko.css
h2 {
color: Olive;
font: Bold 2em Arial,Helvetica,"Liberation Sans";
text-align: center;
}
table {
border-collapse: collapse;
font-family: "Tahoma", Verdana, Arial, Helvetica, sans-serif;
font-size: 75%;
margin: 0 auto;
width:24%;
}
caption {
background: url(img/title.png) no-repeat 50px;
font-size: 400%;
text-indent: -10000px;
}
thead tr {
background-color: #D9FFD9;
border-top: 1px solid black;
border-bottom: 1px solid black;
}
tfoot tr {
background-color: #FFFFFF;
}
Lenguajes Interpretados en el Servidor
37
Guía # 3: Matrices y funciones en PHP
thead th {
padding: 0.5em;
white-space: nowrap;
}
tfoot th {
font-size: 110%;
text-align: right;
padding-right: 0.5em;
letter-spacing: 1px;
background:
}
tfoot td {
padding-left: 0.5em;
color: red;
font-size: 110%;
font-weight: 600;
}
tfoot td:hover {
background-color: red;
color: white;
}
tr {
background-color: #EAFDFF;
}
tr.odd {
background-color: #FFFFFF;
}
tbody tr:hover {
background-color: #AAFF99;
}
td, th {
border: 1px dotted #CCCCCC;
}
tbody td {
padding: 0.5em;
text-align: center;
}
td a:link, th a:link {
color: black;
}
td a:visited, th a:visited {
color: black;
text-decoration: line-through;
}
td a:hover, th a:hover {
color: purple;
text-decoration: underline;
}
td:last-child a:hover {
color: red;
Lenguajes Interpretados en el Servidor
38
Guía # 3: Matrices y funciones en PHP
text-decoration: underline overline;
}
Archivo 3: form.css (el mismo script del Ejercicio #6).
Archivo 4: validar.js (el mismo script del Ejercicio #6).
Ejercicio #8: En este ejemplo se ilustra cómo utilizar la característica de funciones variables que se puede
emplear en PHP. Se tiene una matriz con distintos valores de monedas que se desean convertir a cinco
tipos de monedas diferentes.
Archivo 1: monedas.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Convertir entre monedas</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/monedas.css" />
</head>
<body>
<header>
<h1>Equivalencias entre monedas</h1><hr>
</header>
<?php
$conversion = array("aDolares","aQuetzal","aLempira","aCordova","aColon");
$precios = array(500,750,1000,1500,3000,7500,12000);
function aDolares($dato){
return sprintf("%02.2f", $dato*0.11425);
}
function aQuetzal($dato){
return sprintf("%02.2f", $dato*0.87214);
}
function aLempira($dato){
return sprintf("%02.2f", $dato*2.14132);
}
function aCordova($dato){
return sprintf("%02.2f", $dato*2.60470);
}
function aColon($dato){
return sprintf("%02.2f", $dato*58.1205);
}
?>
<section>
<article>
<table>
<thead>
<tr>
<th>Colones (sv)</th>
<th>Dólares (sv)</th>
<th>Quetzales (gt)</th>
<th>Lempiras (ho)</th>
<th>Córdovas (ni)</th>
<th>Colones (cr)</th>
</tr>
</thead>
<tbody>
<?php
for($i=0;$i<sizeof($precios);$i++){
echo "\t<tr>\n";
echo "\t\t<td>\t\t¢ " . $precios[$i] . "\t\t</td>\n\t\t";
for($j=0;$j<sizeof($conversion);$j++){
$resultado = $conversion[$j];
Lenguajes Interpretados en el Servidor
39
Guía # 3: Matrices y funciones en PHP
switch($resultado):
case "aDolares":
$signo = "$";
break;
case "aQuetzal":
$signo = "Q";
break;
case "aLempira":
$signo = "L$";
break;
case "aCordova":
$signo = "C$";
break;
case "aColon":
$signo = "¢";
break;
endswitch;
echo "<td>\t\t$signo " . number_format($resultado($precios[$i]),3,".",",")
. "\t\t</td>\n\t";
}
echo "\t</tr>\n";
}
?>
</table>
</article>
</section>
</body>
</html>
Archivo 2: monedas.css
body
{
background-image: url(../img/coins.jpg);
background-position: fixed;
background-repeat: repeat;
}
article{
left: 50%;
margin-left: -31%;
position: relative;
width: 62%;
}
h1
{
color:Gold;
font:Bold 2em Eurostile,"Futura Lt",Tahoma,Helvetica,sans-sefif;
text-align:center;
-moz-text-shadow: 5px 5px 3px #A6A476;
-webkit-text-shadow: 5px 5px 3px #A6A476;
-o-text-shadow: 5px 5px 3px #A6A476;
-ms-text-shadow: 5px 5px 3px #A6A476;
text-shadow: 5px 5px 3px #A6A476;
}
table {
border: inset 6px brown;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-o-border-radius: 8px;
border-radius: 8px;
}
Lenguajes Interpretados en el Servidor
40
Guía # 3: Matrices y funciones en PHP
th
{
background-color:DarkRed;
color:Wheat;
font-family:"Bookman Old Style";
font-size:14pt;
text-align:center;
}
td
{
background-color:LemonChiffon;
color:red;
font-family:Garamond;
font-size:12pt;
text-align:center;
}
Ejercicio #9: El siguiente ejemplo implementa funciones con lista variable de argumentos para obtener el
mayor de una lista de números. Los números son proporcionados directamente en el script PHP.
Archivo 1: elmayor.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Trabajando con funciones de lista variable de argumentos</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/elmayor.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<header>
<h1>Mayor de una lista de números</h1><hr />
</header>
<section>
<article id="leftcol">
<?php
function elMayor(){
$num_args = func_num_args();
$args = func_get_args();
//$elmayor = ($dato1 > $dato2) ? $dato1 : $dato2;
$elmayor = $args[0];
for($i=1; $i<$num_args; $i++){
$elmayor = ($elmayor > $args[$i]) ? $elmayor : func_get_arg($i);
}
return $elmayor;
}
echo "El mayor de 58, 167, 242, 85, 31, 109, -26, 81, 16, 126 es " .
"<h2>" . elMayor(58, 167, 242, 85, 31, 109, -26, 81, 16, 126) . "</h2>";
?>
</article>
<article id="rightcol">
<?php
echo "El mayor de 61, 37, 75, 184, 42, -303, 43, 56, -121, 226, 172, 78, 6, 86 es
" .
"<h2>" . elMayor(61, 37, 75, 184, 42, -303, 43, 56, -121, 226, 172,
78, 6, 86) . "</h2>";
?>
</article>
<section>
</body>
</html>
Lenguajes Interpretados en el Servidor
41
Guía # 3: Matrices y funciones en PHP
Archivo 2: elmayor.css
#leftcol
{
background-color: red;
color: white;
float: left;
margin: 2.5em 2em;
padding: 2.2em;
}
#rightcol
{
background-color: green;
color: gold;
float: right;
margin: 2.5em 2em;
padding: 2.2em;
}
article
{
border-radius: 15px;
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
-o-border-radius: 15px;
font: 1em "Lucida Sans Unicode",Helvetica,sans-serif;
height: 10em;
min-height: 6em;
width: 40%;
}
body
{
background-image:
background-image:
background-image:
background-image:
85%);
background-image:
background-image:
linear-gradient(bottom, rgb(68,0,243) 18%, rgb(74,50,160) 85%);
-o-linear-gradient(bottom, rgb(68,0,243) 18%, rgb(74,50,160) 85%);
-moz-linear-gradient(bottom, rgb(68,0,243) 18%, rgb(74,50,160) 85%);
-webkit-linear-gradient(bottom, rgb(68,0,243) 18%, rgb(74,50,160)
-ms-linear-gradient(bottom, rgb(68,0,243) 18%, rgb(74,50,160) 85%);
-webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.18,
rgb(68,0,243)),
color-stop(0.85,
rgb(74,50,160))
);
font-size: 15px;
height: 100%;
width: 100%;
}
h1
{
font: 2.5em "Myriad Web Pro", Tahoma, Helvetica, sans-serif;
color: #fafb3c;
text-shadow: 3px 3px 12px rgba(160, 155, 150, 1);
}
Ejercicio #10: En este ejemplo se ingresan varias edades con validación en el cliente con JavaScript que
permite ingresar solo edades numéricamente correctas. Al enviar los datos ingresados en un cuadro de lista
se calcula en el servidor el promedio de las edades ingresadas y cada una de las edades que se ingresaron.
Archivo 1: edades.html
Lenguajes Interpretados en el Servidor
42
Guía # 3: Matrices y funciones en PHP
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Edades de personas</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/edades.css" />
<script type="text/javascript" src="js/agregar.js"></script>
<script type="text/javascript" src="js/validatefield.js"></script>
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<section>
<article>
<form name="frmedades" action="promedioedad.php" method="POST">
<fieldset>
<legend><span>Edades de personas:</span></legend>
<ul>
<li>
<label for="edad">Ingreso de edades:</label>
<div class="campo">
<input type="text" name="edad" id="edad" maxlength="60" />
<input type="reset" name="agregar" id="agregar" value="Agregar" /><br
/>
<span id="numbersOnly">Sólo acepta números.</span>
</div>
</li>
<li>
<label for="ingresados">Edades ingresadas:</label>
<div class="campo">
<select name="ingresados[]" id="ingresados" size="6"
multiple="multiple"></select>
</div>
</li>
<li>
<div class="campo">
<input type="submit" name="enviar" id="enviar" value="Enviar"
class="boton" />
</div>
</li>
</ul>
</fieldset>
</form>
</body>
</article>
</section>
</html>
Archivo 2: promedioedad.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Productos de la tienda</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/edades.css" />
<script type="text/javascript" src="js/modernizr.custom.lis.js"></script>
</head>
<body>
<section>
<article>
<table>
<thead>
<th class="head">Edades ingresadas</th>
Lenguajes Interpretados en el Servidor
43
Guía # 3: Matrices y funciones en PHP
</thead>
<tbody>
<?php
if(isset($_POST['enviar'])){
if(isset($_POST['ingresados'])){
calcularedadprom($_POST['ingresados']);
}
else{
$msgerr = "No hay edades que procesar.";
$edades = array($msgerr);
calcularedadprom($edades);
}
}
// Función para calcular el promedio de las edades
function calcularedadprom($edades){
$promedades = 0;
$contador = 0;
$celdas = "";
foreach($edades as $edad){
$celdas .=
"\n\t<tr>\n\t\t<td>\n\t\t\t$edad\n\t\t</td>\n\t</tr>\n</tbody>\n";
$promedades += $edad;
$contador++;
}
$promedades /= $contador;
$promedades = number_format($promedades, 2, ".", ",");
$celdas .= "<tfoot>\n";
$celdas .= "<tr>\n\t\t<th>\n\t\t\tLa edad promedio es:
$promedades\n\t\t</th>\n\t</tr>\n";
$celdas .= "</tfoot>\n";
echo $celdas;
}
?>
</table>
</article>
</section>
</body>
</html>
Archivo 3: edades.css
*
{
border:0;
padding:0;
}
#numbersOnly
{
font:Bold 0.75em Arial,Helvetica,sans-serif;
color:Gold;
background-color:Red;
visibility:hidden;
display:block;
}
fieldset
{
width:46%;
position:relative;
margin-left:50%;
left:-23%;
background-color:rgb(190,220,230);
border:6px ridge rgb(50,100,150);
Lenguajes Interpretados en el Servidor
44
Guía # 3: Matrices y funciones en PHP
}
legend span
{
display:block;
border:3px ridge rgb(50,100,150);
background-color:rgb(20,20,100);
font:bold 9pt "Century Gothic","Arial Rounded MT Bold",Helvetica,sans-serif;
color:rgb(225,250,250);
padding:2px 5px;
}
label
{
font:normal 9pt "Arial Rounded MT Bold","Century Gothic",Helvetica,sans-serif;
color:rgb(30,60,100);
display:block;
float:left;
width:30%;
text-align:right;
padding-top:0.6em;
padding-bottom:0.6em;
}
.campo
{
width:68%;
display:block;
position:relative;
float:right;
}
.boton
{
display:block;
width:5em;
margin-left:50%;
left:-2.5em;
bottom:-0.2em;
position:relative;
}
ul
{
list-style-type:none;
margin:0;
padding:0;
}
li
{
line-height:2.1em;
display:block;
}
table
{
width:18%;
position:relative;
margin-left:50%;
left:-9%;
border-collapse:collapse;
border:8px groove rgb(100,10,5);
}
tr
{
border:1px solid rgb(120,20,20);
}
th
{
Lenguajes Interpretados en el Servidor
45
Guía # 3: Matrices y funciones en PHP
background-color:rgb(90,5,3);
font:bold 14pt Garamond,Helvetica,sans-serif;
color:rgb(250,240,200);
}
td
{
background-color: rgb(250,240,200);
color: rgb(100,10,10);
font:normal 14pt Garamond,Helvetica,sans-serif;
text-align: center;
}
Archivo 4: agregar.js
function addEvent(obj, evType, fn){
if(obj.addEventListener){
obj.addEventListener(evType, fn, false);
return true;
}
else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
}
else{
return false;
}
}
function initForms(){
document.getElementById("agregar").onclick = function(){
addProducts(document.frmedades.ingresados, document.frmedades.edad.value);
}
document.getElementById("enviar").onclick = function(){
var contador = 0;
for(var i=0; i<document.frmedades.ingresados.options.length; i++){
if(document.frmedades.ingresados.options[i].selected){
contador++;
}
}
if(contador == 0){
alert("No se han seleccionado elementos.");
return false;
}
}
}
function addProducts(optionMenu, value){
var posicion = optionMenu.length;
optionMenu[posicion] = new Option(value, value);
}
addEvent(window, 'load', initForms);
Archivo 5: validatefield.js
function init(){
var inputtag = document.getElementById("edad");
(inputtag.addEventListener) ? inputtag.addEventListener("keypress", numbersOnly,
false) : inputtag.onkeypress = numbersOnly;
}
// Este es el controlador keypress que filtra la entrada del usuario
function numbersOnly(event) {
// Obtener el objeto event y el código de carácter de la tecla pulsada
Lenguajes Interpretados en el Servidor
46
Guía # 3: Matrices y funciones en PHP
// de forma compatible con todos los navegadores
var e = event || window.event;
// Objeto de evento de la tecla
var code = e.charCode || e.keyCode;
// tecla que se ha pulsado
// Si se ha pulsado una tecla de función de cualquier tipo, no filtrarla
if(e.charCode == 0) return true;
// Tecla de función (solo para Firefox)
if(e.ctrlKey || e.altKey) return true; // Se mantienen presionadas Ctrl o Alt
if(code < 32) return true;
// Carácter de Ctrl en tabla ASCII
// Dejar pasar teclas de retroceso (BackSpace), tabulación (Tab), entrada (Enter),
// escape (Scape) y espacios en blanco (SpaceBar)
if(code==0 || code==8 || code==9 || code==13 || code==27 || code==32) return true;
// Buscar la información de los caracteres válidos para este campo de entrada
var allowed = "0123456789";
// Caracteres válidos
var messageElement = document.getElementById("numbersOnly"); // Mensaja a
ocultar/mostrar
// Convertir el código de carácter a su carácter correspondiente
var c = String.fromCharCode(code);
// Comprobar si el carácter está dentro del conjunto de caracteres permitidos
if (allowed.indexOf(c) != -1) {
// Si c es un carácter legal, ocultar el mensaje, si es que existe.
if(messageElement) messageElement.style.visibility = "hidden";
return true; // Aceptar el carácter
}
else {
// Si c no está en el conjunto de caracteres permitidos, mostrar el mensaje
if(messageElement) messageElement.style.visibility = "visible";
// Y rechazar este evento keypress
if(e.preventDefault) e.preventDefault();
if(e.returnValue) e.returnValue = false;
return false;
}
}
addEvent(window, 'load', init);
Ejercicio #11: El siguiente ejemplo muestra cómo constuir una aplicación modular creando un sitio web en
partes, primero con un archivo denominado header.php, luego el footer.inc.php y el archivo
header.inc.php. Ambos archivos son integrados en home.php para armar la página principal de un sitio
web. Esta técnica de construcción es llamada modularidad, ya que se utilizan archivos .inc.php
Archivo 1: sitio.php
<?php
require('header.inc.php');
?>
<body>
<div id="pagewrap">
<!-- #header y #nav -->
<?php
require('nav.inc.php');
?>
<!-- /#header y #nav -->
<!-- #content -->
<?php
require('content.php');
?>
<!-- /#content -->
<!-- #sidebar -->
Lenguajes Interpretados en el Servidor
47
Guía # 3: Matrices y funciones en PHP
<?php
require('sidebar.php');
?>
<!-- /#sidebar -->
<!-- #footer -->
<?php
require('footer.inc.php');
?>
<!-- /#footer -->
Archivo 2: header.inc.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<title>Web adaptable con Media Queries</title>
<!--css -->
<link rel="stylesheet" type="text/css" href="css/style.css" />
<!-- <link href="media-queries.css" rel="stylesheet" type="text/css"> -->
<!-- html5.js - IE 9 -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- css3-mediaqueries.js - IE 9 -->
<!--[if lt IE 9]>
<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3mediaqueries.js"></script>
<![endif]-->
</head>
Archivo 3: nav.inc.php
<header id="header">
<hgroup>
<img src="img/logo.png" id="logo" alt="logo" >
<h1 id="site-description">Responsive Design con CSS3 Media Queries</h1>
</hgroup>
<nav>
<ul id="main-nav" class="clearfix">
<?php
$menuoptions = array("Home", "Quiénes somos", "Servicios", "Portafolio",
"Blog", "Contacto");
$listitems = "";
foreach($menuoptions as $item):
$listitems .= "\n<li>\n\n<a
href=\"javascript:void(0);\">$item</a>\n</li>\n";
endforeach;
echo $listitems;
?>
</ul>
</nav>
<!-- nav -->
<form id="searchform" action="javascript:void(0);">
<input id="s" placeholder="Search" type="search">
</form>
</header>
Archivo 4: content.php
<div id="content">
<article class="post clearfix">
<h2 class="post-title"><a href="#">HTML5</a></h2>
Lenguajes Interpretados en el Servidor
48
Guía # 3: Matrices y funciones en PHP
<figure class="post-imagen">
<img src="img/html5-imagen.jpg">
</figure>
<p>
<strong>HTML5</strong>
(<em><strong>H</strong>yper<strong>T</strong>ext <strong>M</strong>arkup
<strong>L</strong>anguage</em>, versión 5) es la quinta revisión importante
del lenguaje básico de la
<a href="http://es.wikipedia.org/wiki/World_Wide_Web" title="World Wide Web">World
Wide Web</a>,
<a href="http://es.wikipedia.org/wiki/HTML" title="HTML">HTML</a>.
HTML5 especifica dos variantes de sintaxis para HTML: un «clásico» HTML
(text/html),
la variante conocida como <em>HTML5</em> y una variante
<a href="http://es.wikipedia.org/wiki/XHTML" title="XHTML">XHTML</a>
conocida como sintaxis <em>XHTML5</em> que deberá ser servida como XML (XHTML)
(application/xhtml+xml).
<a href="http://es.wikipedia.org/wiki/HTML5#cite_note-w3cSpec-0">1</a>
<a href="http://es.wikipedia.org/wiki/HTML5#cite_note-franganilloHTML5-1">2</a>
Esta es la primera vez que HTML y XHTML se han desarrollado en paralelo.
</p>
<p>
Todavía se encuentra en modo experimental, lo cual indica la misma W3C; aunque ya
es usado
por múltiples desarrolladores web por sus avances, mejoras y ventajas.
</p>
<p>
Al no ser reconocido en viejas versiones de navegadores por sus nuevas etiquetas,
se
le recomienda al usuario común actualizar a la versión más nueva, para poder
disfrutar
de todo el potencial que provee HTML5.
</p>
</article>
<article class="post clearfix">
<h2 class="post-title"><a href="#">CSS3</a></h2>
<figure class="post-imagen">
<img src="img/css3-imagen.jpg">
</figure>
<p>
El nombre <strong>hojas de estilo en cascada</strong> viene del
<a href="http://es.wikipedia.org/wiki/Idioma_ingl%C3%A9s" title="Idioma
inglés">inglés</a>
<em>Cascading Style Sheets</em>, del que toma sus siglas.
CSS es un lenguaje usado para definir la presentación de
un documento estructurado escrito en
<a href="http://es.wikipedia.org/wiki/HTML" title="HTML">HTML</a>
o <a href="http://es.wikipedia.org/wiki/XML" title="XML">XML</a>
<a href="http://es.wikipedia.org/wiki/CSS3#cite_note-1">2</a>
(y por extensión en <a href="http://es.wikipedia.org/wiki/XHTML"
title="XHTML">XHTML</a>).
</p>
<p>
El <a href="http://es.wikipedia.org/wiki/W3C" title="W3C">W3C</a>
(World Wide Web Consortium) es el encargado de formular la especificación de las
<a href="http://es.wikipedia.org/wiki/Hojas_de_estilo" title="Hojas de
estilo">hojas de estilo</a> que servirán de estándar para los
<a href="http://es.wikipedia.org/wiki/Agentes_de_usuario" title="Agentes de
usuario">agentes de usuario</a> o
<a href="http://es.wikipedia.org/wiki/Navegadores"
title="Navegadores">navegadores</a>.<br>
La idea que se encuentra detrás del desarrollo de CSS es separar la
<em>estructura</em> de un documento de su <em>presentación</em>.
Lenguajes Interpretados en el Servidor
49
Guía # 3: Matrices y funciones en PHP
</p>
</article>
<!-- /.post -->
</div>
Archivo 5: sidebar.php
<aside id="sidebar">
<section class="widget">
<h4 class="widgettitulo">Noticias</h4>
<ul>
<?php
$submenuoptions = array(
"Diseño Web",
"Diseño Gráfico",
"WordPress",
"Joomla",
"Drupal",
"Redes Sociales",
"SEO"
);
$listsubmenu = "";
foreach($submenuoptions as $itemsub):
$listsubmenu .= "\n<li>\n\n<a
href=\"javascript:void(0);\">$itemsub</a>\n</li>\n";
endforeach;
echo $listsubmenu;
?>
</ul>
</section>
<section class="widget">
<h4 class="widgettitulo">Sitos Web</h4>
<ul>
<?php
$externallinks = array(
"http://www.tutosytips.com/"
=> "Tutosytips.com",
"http://www.wordpress.org.com/" => "Wordpress",
"http://www.Joomla.org/"
=> "Joomla",
"http://www.twetter.com/"
=> "Twetter",
"http://www.facebook.com/"
=> "Facebook",
"http://www.youtube.com/"
=> "YouTube",
"javascript:void(0);" => "SEO"
);
$listext = "";
foreach($externallinks as $extlink => $extitem):
$listext .= "\n<li>\n\n<a href=\"$extlink\">$extitem</a>\n</li>\n";
endforeach;
echo $listext;
?>
</ul>
</section>
</aside>
Archivo 6: footer.inc.php
<footer id="footer">
<p>Tutorial por <a href="http://tutosytips.com/">tutosytips</a></p>
</footer>
<!-- footer -->
</div>
<!-- /#pagewrap -->
</body>
</html>
Lenguajes Interpretados en el Servidor
50
Guía # 3: Matrices y funciones en PHP
Archivo 7: style.css
/************************************************************************************
* Resetear estilos por defecto definidos por los navegadores
*
************************************************************************************/
html, body, address, blockquote, div, dl, form,
h1, h2, h3, h4, h5, h6, ol, p, pre, table, ul,
dd, dt, li, tbody, td, tfoot, th, thead, tr,
button, del, ins, map, object, a, abbr, acronym,
b, bdo, big, br, cite, code, dfn, em,
i, img, kbd, q, samp, small, span, strong,
sub, sup, tt, var, legend, fieldset {
margin: 0;
padding: 0;
}
img, fieldset {
border: 0;
}
img {
max-width: 100%;
height: auto;
width: auto\9; /* ie8 */
}
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
margin: 0;
}
/************************************************************************************
* ESTILOS GENERALES
*
************************************************************************************/
body {
/* background: #0d1424 url(../img/waves_bg.jpg) repeat center top; */
background: #0d1424 url(../img/bg-blue.jpg) repeat center top;
font: .81em/150% Arial, Helvetica, sans-serif;
color: #666;
}
a {
color: #026acb;
text-decoration: none;
outline: none;
}
a:hover {
text-decoration: underline;
}
p {
margin: 0 0 1.2em;
padding: 0;
}
/* list */
ul, ol {
margin: 1em 0 1.4em 24px;
padding: 0;
line-height: 140%;
}
Lenguajes Interpretados en el Servidor
51
Guía # 3: Matrices y funciones en PHP
li {
margin: 0 0 .5em 0;
padding: 0;
}
/* headings */
h1, h2, h3, h4, h5, h6 {
line-height: 1.4em;
margin: 20px 0 .4em;
color: #000;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 1.6em;
}
input[type=search] {
-webkit-appearance: none;
outline: none;
}
#pagewrap {
width: 980px;
margin: 0 auto;
}
#header {
position: relative;
height: 160px;
}
/* site description */
#site-description {
color: #FFFFFF;
left: 160px;
position: absolute;
top: 30px;
}
#searchform {
position: absolute;
right: 10px;
bottom: 6px;
z-index: 100;
width: 160px;
}
#searchform #s {
width: 140px;
float: right;
background: #fff;
border: none;
padding: 6px 10px;
/* border radius */
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
Lenguajes Interpretados en el Servidor
52
Guía # 3: Matrices y funciones en PHP
behavior: url(htc/border-radius.htc);
/* box shadow */
-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
/* transition */
-webkit-transition: width .7s;
-moz-transition: width .7s;
transition: width .7s;
}
#main-nav {
width: 100%;
background: #ccc;
margin: 0;
padding: 0;
position: absolute;
left: 0;
bottom: 0;
z-index: 100;
/* gradient */
background: #6a6a6a url(../img/nav-bar-bg.png) repeat-x;
background: -webkit-gradient(linear, left top, left bottom, from(#b9b9b9),
to(#6a6a6a));
background: -moz-linear-gradient(top, #b9b9b9, #6a6a6a);
background: linear-gradient(-90deg, #b9b9b9, #6a6a6a);
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-o-border-radius: 8px;
-ms-border-radius: 8px;
border-radius: 8px;
behavior: url(htc/border-radius.htc);
/* box shadow */
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 1px 1px rgba(0,0,0,.4);
}
#main-nav li {
margin: 0;
padding: 0;
list-style: none;
float: left;
position: relative;
}
#main-nav li:first-child {
margin-left: 10px;
}
#main-nav a {
line-height: 100%;
font-weight: bold;
color: #fff;
display: block;
padding: 14px 15px;
text-decoration: none;
text-shadow: 0 -1px 0 rgba(0,0,0,.5);
}
#main-nav a:hover {
color: #fff;
Lenguajes Interpretados en el Servidor
53
Guía # 3: Matrices y funciones en PHP
background:
/* gradient
background:
to(#797979));
background:
background:
#474747;
*/
-webkit-gradient(linear,
left
top,
left
-moz-linear-gradient(top, #cdcdcd, #797979);
linear-gradient(-90deg, #cdcdcd, #797979);
}
#content {
background: #fff;
margin: 30px 0 30px;
padding: 20px 35px;
width: 600px;
float: left;
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-o-border-radius: 8px;
-ms-border-radius: 8px;
border-radius: 8px;
behavior: url(htc/border-radius.htc);
/* box shadow */
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.4);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.4);
box-shadow: 0 1px 3px rgba(0,0,0,.4);
}
h2.post-title {
background: #888;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
behavior: url(htc/border-radius.htc);
padding: 0px 5px ;
border-top: 1px solid #889;
border-bottom: 1px solid #889;
text-align: center;
}
h2.post-title a {
color: #FFFFFF;
font-size: 0.9em;
text-shadow: 1px 1px 2px #333333;
}
.post {
margin-bottom: 20px;
}
.post-title {
margin: 0 0 5px;
padding: 0;
font: bold 26px/120% Arial, Helvetica, sans-serif;
}
.post-title a {
text-decoration: none;
color: #000;
}
Lenguajes Interpretados en el Servidor
54
bottom,
from(#cdcdcd),
Guía # 3: Matrices y funciones en PHP
.post-meta {
margin: 0 0 10px;
font-size: 90%;
}
figure.post-imagen img {
float: left;
margin: 5px;
max-width: 260px;
}
#sidebar {
width: 280px;
float: right;
margin: 30px 0 30px;
}
.widget {
background: #402c80;
margin: 0 0 30px;
padding: 10px 20px;
/* rounded corner */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-o-border-radius: 8px;
-ms-border-radius: 8px;
border-radius: 8px;
behavior: url(htc/border-radius.htc);
/* box shadow */
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.4);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.4);
box-shadow: 0 1px 3px rgba(0,0,0,.4);
}
.widgettitulo {
background: none repeat scroll 0 0 #9f7ce9;
border-radius: 5px 5px 5px 5px;
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px 5px 5px 5px;
-o-border-radius: 5px 5px 5px 5px;
-ms-border-radius: 5px 5px 5px 5px;
behavior: url(htc/border-radius.htc);
color: #FFFFFF;
margin: 0 0 5px;
padding: 6px 0;
text-align: center;
}
.widget ul {
margin: 0;
padding: 0;
}
.widget li {
margin: 0;
padding: 2px 0;
list-style: none;
clear: both;
border-top: solid 1px #eee;
}
section.widget ul li a {
color: #fff;
Lenguajes Interpretados en el Servidor
55
Guía # 3: Matrices y funciones en PHP
font-weight: bold;
font-style: italic;
font-size: 1em;
padding: 11px;
display: block;
-webkit-transition: all 0.4s ease;
-moz-transition: all 0.4s ease;
transition: all 0.4s ease-out;
}
section.widget ul li a:hover {
background: #fff;
color: #6B6B6B !important;
text-decoration: none;
}
/*---FOOTER---*/
#footer {
background: none repeat scroll 0 0 #999999;
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px 5px 5px 5px;
-o-border-radius: 5px 5px 5px 5px;
-ms-border-radius: 5px 5px 5px 5px;
border-radius: 5px 5px 5px 5px;
behavior: url(htc/border-radius.htc);
clear: both;
color: #333333;
font-size: 90%;
text-align: center;
}
#footer a {
color: #fff;
}
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0; }
.clearfix {
display: inline-block;
}
.clearfix {
display: block; zoom: 1;
}
/****************************************************
*
CONDICIONALES DE MEDIA QUERIES
*
****************************************************/
@media screen and (max-width: 980px) {
#pagewrap {
width: 95%;
}
#content {
width: 60%;
padding: 3% 4%;
Lenguajes Interpretados en el Servidor
56
Guía # 3: Matrices y funciones en PHP
}
figure.post-imagen img {
float: left;
margin: 5px;
max-width: 230px;
}
#sidebar {
width: 30%;
}
#sidebar .widget {
padding: 8% 7%;
margin-bottom: 10px;
}
}
@media screen and (max-width: 650px) {
#header {
height: auto;
}
#searchform {
position: absolute;
top: 5px;
right: 0;
z-index: 100;
height: 40px;
}
#searchform #s {
width: 70px;
}
#searchform #s:focus {
width: 150px;
}
#main-nav {
position: static;
}
#site-logo {
margin: 15px 100px 5px 0;
position: static;
}
/* site description */
#site-description {
margin: 0 0 15px;
position: static;
text-align: center;
}
#content {
width: auto;
float: none;
margin: 20px 0;
}
figure.post-imagen img {
float: left;
margin: 5px;
max-width: 180px;
}
#sidebar {
width: 100%;
margin: 0;
float: none;
}
#sidebar .widget {
padding: 3% 4%;
Lenguajes Interpretados en el Servidor
57
Guía # 3: Matrices y funciones en PHP
margin: 0 0 10px;
}
}
@media screen and (max-width: 480px) {
html {
-webkit-text-size-adjust: none;
}
#main-nav a {
font-size: 90%;
padding: 10px 8px;
}
figure.post-imagen img {
float: left;
margin: 5px;
max-width: 130px;
}
}
V. DISCUSION DE RESULTADOS
1. Realice un script PHP que dadas tres notas de un listado de estudiantes organizadas en una matriz
asociativa, le permita obtener el promedio de ellas sabiendo que las notas son de una tarea, una
investigación y el examen parcial con la ponderación de 50%, 30% y 20% respectivamente. Por último,
muestre las notas promediadas de cada alumno en una tabla bien presentable, mostrando el nombre
del alumno, la nota que tiene en cada actividad y en una celda combinada su promedio.
SUGERENCIA: Haga una matriz con la siguiente estructura para facilitar el proceso:
$notas = array(
"nombre Alumno1" => array(
"Parcial" => 9.1,
"Tarea" => 0
), …
2. Realice un script PHP que utilice una función para que dada una lista de números enteros ingresada
por el usuario (como mínimo 2 números) permita encontrar el número mayor y menor de dicha lista
utilizando dos funciones con lista variable de argumentos, una para encontrar el número mayor y
otra para encontrar el número menor. La solución debe permitir visualizar la lista de números
ingresados e indicar cuáles han sido el número mayor y el número menor encontrados por sus
funciones.
3. Haciendo uso de la modularidad descrita en el ejemplo 11 del procedimiento, cree una página web
que incluya un archivo PHP para la sección head de la página que incluya la Definición de Tipo de
Documento, otro para la sección footer, el menú de navegación principal, la sección content y la
sección sidebar. Tiene que tomar un diseño distinto del que se mostró en el ejemplo. Puede ser la
misma distribución en las mismas posiciones, pero tiene que utilizar una hoja de estilo diferente.
VI. INVESTIGACIÓN COMPLEMENTARIA
1. Investigue la utilización de las funciones include_once() y require_once() e indique la diferencia o
diferencias que tienen con respecto a sus homólogas include() y require().
Lenguajes Interpretados en el Servidor
58
Guía # 3: Matrices y funciones en PHP
VII. BIBLIOGRAFIA





Gil Rubio, Francisco Javier/Villaverde, Santiago Alonso/Tejedor Cerbel, Jorge A. Creación de sitios web
con PHP 5. Editorial McGraw-Hill. 1ra edición. Madrid, España, 2006.
Gutiérrez, Abraham / Bravo, Ginés. PHP 5 a través de ejemplos. Editorial Alfaomega RAMA. 1ª edición.
Junio 2005. México.
John Coggeshall. La Biblia de PHP 5. Editorial Anaya Multimedia. Madrid España. 1ª edición. Madrid,
España.
Michele E. Davis / John A. Phillips. Creación de sitios web dinámicos con PHP y MySQL. Editorial Anaya
Multimedia / O’Reilly. 1ª edición. Madrid, España.
http://www.php.net/manual/es
Lenguajes Interpretados en el Servidor
59
Descargar