Está en la página 1de 23

UNIVERSIDAD DON BOSCO

FACULTAD DE ESTUDIOS TECNOLÓGICOS


ESCUELA DE COMPUTACIÓN
GUIA DE LABORATORIO #3
Nombre de la Practica: Matrices en PHP
Lugar de Ejecución: Centro de Cómputo
CICLO: 01/2013 Tiempo Estimado: 2 horas con 30 minutos
MATERIA: Lenguajes Interpretados en el Servidor
DOCENTES: 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.

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.

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,

1 / 23
Guía # 3: Matrices en PHP

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"];

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:

Lenguajes Interpretados en el Servidor 2


Guía # 3: Matrices en PHP

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

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.

Lenguajes Interpretados en el Servidor 3


Guía # 3: Matrices en PHP

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{
$index = key($matriz);
$value = current($matriz);
echo $index . ": " . $value . "<br>\n";
}while(next($matriz));

Lenguajes Interpretados en el Servidor 4


Guía # 3: Matrices en PHP

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: clave y valor */


$a = array(
"uno" => 1,
"dos" => 2,
"tres" => 3,
"diecisiete" => 17
);

foreach($a as $k => $v) {


print "\$a[$k] => $v.\n";
}

/* foreach ejemplo 4: matriz multi-dimensional */

$a[0][0] = "a";

Lenguajes Interpretados en el Servidor 5


Guía # 3: Matrices en PHP

$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "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";
}
?>

En la siguiente guía de práctica se profundizará en el uso de matrices o arreglos.

III. MATERIALES Y EQUIPO

Para la realización de la guía de práctica se requerirá lo siguiente:


No. Material Cantidad
1 Guía de práctica #3: Estructuras de control – Sentencias repetitivas 1
2 Computadora con WampServer y PHP Designer instalados 1
3 Memoria USB o disco flexible 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.
Archivo 1: notasalumnos.php
<?php
$nombres = array(
'Mariela Salazar' => 6.4,
'Mauricio L&oacute;pez' => 6.3,
'Carlos &Aacute;valos' => 7.5,
'Jennifer S&aacute;nchez' => 6.2,
'Jonathan Calder&oacute;n' => 7.5,
'Pedro Cruz' => 5.8,
'Morena Barraza' => 6.0,
'Beatriz Hern&aacute;ndez' => 5.0,
'Alberto Figueroa' => 9.5,
'Julia Garc&iacute;a' => 8.5,
'Roxana V&aacute;squez' => 8.2,
'Oscar Hern&aacute;ndez' => 8.5,
'Lorena Linares' => 4.8,
'Ramiro Zepeda' => 5.5,
'Luis Pe&ntilde;ate' => 9.6,
'Jos&eacute; Menjivar' => 6.0,

Lenguajes Interpretados en el Servidor 6


Guía # 3: Matrices en PHP

'Sonia Leiva' => 5.1,


'Ernesto Fuentes' => 6.0,
'Claudia Ponce' => 6.8,
'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\" media=\"screen\"
href=\"css/notasalumnos.css\" />\n";
echo "</head>\n";
echo "<body>\n";
echo "<header>";
echo "<h1>Notas de los estudiantes</h1><hr>\n";
echo "</header>";
echo "<section>";
echo "<article>";
echo "<table>\n";
echo "<thead>\n";
echo "<tr>\n";
echo "<th>\n";
echo "Nombre\n</th>\n";
echo "<th>\n";
echo "CUM\n</th>\n";
echo "</tr>\n";
echo "</thead>\n";
echo "<tbody>\n";
foreach($nombres as $name => $nota){
echo "<tr>\n";
echo "<td>\n";
echo "$name\n</td>\n";
echo "<td class=\"cum\">\n";
echo number_format($nota, 1, '.', ',') . "\n</td>\n";
echo "</tr>\n";
}
echo "</tbody>\n";
echo "</table>";
echo "</article>";
echo "</section>";
echo "</body>";
echo "</html>";
?>

Archivo 2: notasalumnos.css
h1 {
font:bold 20pt "Myriad Pro","Bodoni MT Black",Rockwell,Helvetica,sans-serif;
color:#033006;
text-align:center;
}

table {
width:20%;
position:relative;
margin-left:50%;
left:-10%;
border-collapse:collapse;
border:8px outset DarkSlateBlue;
}

tr {

Lenguajes Interpretados en el Servidor 7


Guía # 3: Matrices en PHP

border:1px solid DarkSlateBlue;


}

th {
font:bold 12pt "Lucida Sans","Century Gothic",Helvetica,sans-serif;
color:Gold;
line-height:1.4em;
text-align:center;
border:1px solid DarkSlateBlue;
background-color:rgb(0,100,100);
}

td {
font:normal 11pt "Century Gothic","Lucida Sans",Helvitica,sans-serif;
color:rgb(60,0,90);
}

.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&oacute;n range</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/series.css" />
</head>
</body>
<header>
<h1>Generaci&oacute;n de series con funci&oacute;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&uacute;sculas</option>
<option value="AlfabetoMay">Alfabeto en may&uacute;sculas</option>
<option value="NumerosPares">N&uacute;meros pares</option>
<option value="NumerosImpares">N&uacute;meros impares</option>
</select><br />
<input type="submit" name="enviar" value="Enviar">
</fieldset>
</form>
<?php
if(isset($_POST['enviar'])){
$tiposecuencia = isset($_POST['seltipo']) ? $_POST['seltipo'] : "";
switch($tiposecuencia){
case "AlfabetoMin":
$inicio = 'a';
$final = 'z';
$salto = '1';

Lenguajes Interpretados en el Servidor 8


Guía # 3: Matrices en PHP

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>&nbsp;&nbsp;\n";
}
?>
</article>
</section>
</body>
</html>

Archivo 2: series.css
h1 {
font: bold 20pt "Myriad Pro","Bodoni MT Black",Rockwell,Helvetica,sans-serif;
color: Brown;
text-align: center;
text-shadow: 5px 2px 2px rgba(90,42,35,0.75);
}

fieldset {
width:36%;
position:relative;
margin-left:50%;
left:-18%;
background-color:Lavender;
}

legend {
font:bold 12pt "Lucida Sans","Calisto MT","Bodoni MT",Helvetica,sans-serif;
color:Indigo;
}

label {
font:600 10.5pt "Lucida Sans","Bodoni MT",Helvetica,sans-serif;
color:DarkGreen;
}

.caracter {
font:600 10pt "Lucida Sans Unicode",Georgia,Helvetica,sans-serif;
color:Indigo;
}

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.

Lenguajes Interpretados en el Servidor 9


Guía # 3: Matrices en PHP

Archivo 1: registro.php
<!DOCTYPE html>
<html lang="es">
<head>
<title>Mi agenda</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/registros.css" />
</head>
<body>
<header>
<h1>Estudiantes registrados</h1><hr />
</header>
<?php
$alumnos = array(
"registro 1" => array(
"carnet" => 'EG070425',
"nombre" => 'Mario Alexander',
"apellido" => 'Erazo Guti&eacute;rrez',
"telefono" => '2221-0916'
),
"registro 2" => array(
"carnet" => 'RD070316',
"nombre" => 'Edgard Antonio',
"apellido" => 'Rodr&iacute;guez Dur&acute;n',
"telefono" => '2221-0673'
),
"registro 3" => array(
"carnet" => 'FS060546',
"nombre" => 'Gerardo Arturo',
"apellido" => 'Fonseca Saravia',
"telefono" => '2226-1539'
),
"registro 4" => array(
"carnet" => 'SG063125',
"nombre" => 'Ana Lilian',
"apellido" => 'Santana God&iacute;nez',
"telefono" => '2292-0425'
),
"registro 5" => array(
"carnet" => 'EJ052105',
"nombre" => 'Clara Asunci&oacute;n',
"apellido" => 'Escamilla Jovel',
"telefono" => '2221-1385'
),
"registro 6" => array(
"carnet" => 'EJ052105',
"nombre" => 'Pedro Jos&eacute;',
"apellido" => 'Cruz Rodr&iacute;guez',
"telefono" => '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";

Lenguajes Interpretados en el Servidor 10


Guía # 3: Matrices en PHP

echo "</section>\n"
?>
</body>
</html>

Archivo 2: registros.css
h1 {
font:bold 22pt "Bodoni MT Black","Cooper Black",Helvetica,sans-serif;
text-align:center;
color:rgb(200,250,180);
border:2px double rgb(20,80,40);
background-color:Brown;
}

table {
background-color:rgb(190,240,180);
border:5px groove Brown;
position:relative;
width:18%;
margin-left:50%;
left:-9%;
}

th {
background-color:Orange;
border:3px solid BurlyWood;
font-family:Garamond;
font-weight:800;
font-size:11pt;
}

td {
border:3px solid SeaGreen;
font-family:Georgia;
font-weight:400;
font-size:10pt;
}

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" />
<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>

Lenguajes Interpretados en el Servidor 11


Guía # 3: Matrices en PHP

<div class="campo">
<input type="text" name="producto" id="producto" maxlength="60"
required="required" />
<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){


var posicion = optionMenu.length;
optionMenu[posicion] = new Option(value, value);
}

Archivo 3: productos.css
fieldset {
width:46%;
position:relative;

Lenguajes Interpretados en el Servidor 12


Guía # 3: Matrices en PHP

margin-left:50%;
left:-23%;
background-color:rgb(190,220,230);
border:6px ridge rgb(50,100,150);
}

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 {

Lenguajes Interpretados en el Servidor 13


Guía # 3: Matrices en PHP

border:1px solid rgb(120,20,20);


}

th {
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);
font:normal 14pt Garamond,Helvetica,sans-serif;
color:rgb(100,10,10);
}

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" />
</head>
<body>
<section>
<article>
<table>
<thead>
<th class="head">Productos</th>
</thead>
<tbody>
<?php
if(isset($_POST['enviar'])){
if(isset($_POST['ingresados'])){
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>

Lenguajes Interpretados en el Servidor 14


Guía # 3: Matrices en PHP

<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&iacute;</h3>
<h4>Estas son las pel&iacute;culas en cartelera</h4>
</hgroup>
<div id="">
<form action="pagoentrada.php" method="POST">
<fieldset>
<legend><span>Entrada al cine</span></legend>
<label for="pelicula">Pel&iacute;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>

Lenguajes Interpretados en el Servidor 15


Guía # 3: Matrices en PHP

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,0.93) 5%, rgba(182,141,76,1) 100%); /*FF3.6+*/
background: -webkit-gradient(linear, left top, left bottom, color-
stop(0%,rgba(243,226,199,0.93)), color-stop(1%,rgba(243,226,199,0.93)), color-
stop(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)
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);

Lenguajes Interpretados en el Servidor 16


Guía # 3: Matrices en PHP

-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, color-
stop(0%,rgba(239,197,202,1)), color-stop(3%,rgba(241,142,153,1)), color-
stop(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)
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;

Lenguajes Interpretados en el Servidor 17


Guía # 3: Matrices en PHP

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;
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(

Lenguajes Interpretados en el Servidor 18


Guía # 3: Matrices en PHP

"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",
"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

Lenguajes Interpretados en el Servidor 19


Guía # 3: Matrices en PHP

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;
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&oacute;n de formulario</caption>
<thead>
<tr class="thead">
<th scope="col" colspan="2">Boleto de entrada</th>

Lenguajes Interpretados en el Servidor 20


Guía # 3: Matrices en PHP

</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&iacute;cula</a>
</article>
</section>
</body>
</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;

Lenguajes Interpretados en el Servidor 21


Guía # 3: Matrices en PHP

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;
}

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
), …

VI. INVESTIGACIÓN COMPLEMENTARIA

1. Investigue la utilización de la función natcasesort de PHP, indique en comentarios dentro de un script


de ejemplo cuál es el propósito de su utilización. Implemente el ejemplo con un formulario que
incluya un campo de texto y un cuadro de lista en donde se agreguen las cadenas que son ingresadas
en el campo de texto, tal cual se hace en el ejercicio 4 del procedimiento de esta guía utilizando el
script js: productos.js.

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.

Lenguajes Interpretados en el Servidor 22


Guía # 3: Matrices en PHP

• 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 23

También podría gustarte