Escolar Documentos
Profissional Documentos
Cultura Documentos
Y la lista crecera acorde a la cantidad de pases que forme parte de la lista de clientes.
Esto generara una divisin de la memoria por cada pas agregado segn el siguiente modelo:
MEMORIA:
pais1
"Argentina"
pais2
"Chile"
pais3
"Per"
pais4
"Uruguay"
La estructura de datos Array, nos propone tener un nico nombre de variable, y acceder a sus
contenidos por el nivel que corresponda:
$paises = array( ); //se usa esta funcin como constructora del array
$paises[0] = Argentina; //los corchetes en la variable le dice a qu nivel se accede
$paises[1] = Chile;
$paises[2] = Per;
$paises[3] = Uruguay;
ste modelo produce un cambio en el comportamiento de la memoria, ahora se tiene una sola
variable, que a su vez se sub-fracciona en la cantidad de niveles que correspondan:
MEMORIA:
paises
0
"Argentina"
1
"Chile"
2
"Per"
3
"Uruguay"
Cabe destacar que TODOS los arrays inician sus ndices en el valor 0.
Clientes Web
03. Estructura de datos: Arrays
INSTANCIADO:
Los arrays son un tipo de dato en PHP que obligatoriamente necesita tener declarado su tipo
de dato al instanciarlo. No se permite asignarle un valor a una posicin de un array si no se ha
definido como tal, por lo cual el siguiente cdigo es errneo:
$alumnos[0] = Juan Prez; //segn el php.ini da error si no se defini como
array();
Si se desea, se le puede asignar contenido desde el mismo momento en que se lo declara (con
el constructor array(); ), pasndole su contenido inicial entre los corchetes, separando todos
los valores por coma, como en el ejemplo que se muestra a continuacin:
$canales = array( Telefe, Amrica, Canal 7 ,Canal 9, Fox ) ;
Una ventaja de este tipo de dato, es que permite guardar en sus distintos niveles diferentes
tipos de datos, pudiendo tener bajo el mismo nombre de variable, un booleano, un string, un
nmero y otro array (conocido arrays multidimensionales, de lo que se hablar ms tarde).
Por ejemplo:
$datos = array();
$datos[0] = Un texto;
$datos[1] = 100;
$datos[2] = true;
$datos[3] = array( cero,uno,dos ) ;
Se puede guardar una posicin de array (mucho) mayor que el nivel mximo guardado, en
cuyo caso el array se estirara hasta el nivel especificado:
$datos = array( a,b,c ) ; // la posicin mxima del array es 2
$datos[99] = estirado;
En este ejemplo, cuando se completa la posicin 99, el array pasa a tener 100 posiciones
(contando la posicin 0 como una ms). Cabe destacar que todas las posiciones del medio (de
la 3 a la 98, inclusive) son ndices o niveles fuera del rango (darn un undefined index
undefined offset si se los quiere mostrar).
Clientes Web
03. Estructura de datos: Arrays
Si por algn motivo se desea mostrar una posicin de array inexistente o vaca, el programa
mostrar la advertencia undefined offset #numero (nivel indefinido #numero).
Anexando al ejemplo anterior hacer
echo $canales[5] ; //muestra en pantalla undefined offset 5
Dado que en cada vuelta del ciclo de repeticin la variable i va cambiando su valor, se la
aprovecha como ndice del array a mostrar, de esa manera el for realizara la siguiente
iteracin:
echo
echo
echo
echo
$datos[0]
$datos[1]
$datos[2]
$datos[3]
muestra
muestra
muestra
muestra
cero;
uno;
dos;
tres;
Clientes Web
03. Estructura de datos: Arrays
Para recorrerlo, el ciclo for empezara en cero, y se ejecutara mientras el ciclo este por debajo
del largo (sin incluirlo, sino mostrara un error de tipo undefined offset).
$datos = array( cero,uno,dos ) ;
$cantidad = count( $datos ) ;
for($i = 0; $i < $cantidad; $i++){
echo $datos[$i] . <br />;
}
En este caso, el for terminar en el ndice 3 (inclusive), que se mostrar con el error
undefined offset y adems nunca pasar por el ndice 5 porque count() devolvi 4.
echo
echo
echo
echo
$datos[0]
$datos[1]
$datos[2]
$datos[3]
muestra
muestra
muestra
muestra
cero;
uno;
dos;
undefined offset 3;
ste punto se resolver ms adelante con un ciclo de repeticin PROPIO de la estructura array.
ARRAYS ASOCIATIVOS:
Una ventaja de los arrays en los lenguajes descendientes de C (javascript, action script y php
por ejemplo) es la posibilidad de usar, en lugar de ndices numricos, ndices basados en
palabras, stos se conocen como asociativos.
Por lo cual se puede tener una lista de datos en un array, pero usar en vez de nmeros,
palabras (que sean representativas).
Clientes Web
03. Estructura de datos: Arrays
$datos = array( );
$datos[nombre] = Germn;
$datos[apellido] = Rodrguez;
$datos[edad] = 32;
$datos[email] = grodriguez@escueladavinci.net;
Al igual que con los ndices numricos, para mostrarlos, slo hace falta hacer referencia a la
posicin deseada por su ndice asociativo:
echo $datos[nombre] ; //mostrar Germn
El problema est que ya no podemos usar el ciclo de repeticin numrico, porque cuando le
digamos que me muestre el valor $datos[0] devolver undefined offset 0 ya que esa
posicin no existe.
Para ello nos queda ver un ltimo ciclo de repeticin pensado exclusivamente para arrays.
FOREACH:
Hay un ciclo de repeticin que slo trabaja con la estructura de datos Array, que nos permitir
recorrer cada posicin del array, independientemente de qu tipo de ndice posea (numrico o
asociativo).
Ese ciclo de repeticin se llama FOREACH (para cada ).
Es un ciclo de repeticin for que entre parntesis en vez de recibir los tres parmetros
normales (inicio de variable, condicin e incremento), recibe el array que va a recorrer y dos (o
tres) variables ms que representan al valor de cada posicin y su ndice.
Ejemplo:
$datos = array( );
$datos[nombre] = Germn;
$datos[apellido] = Rodrguez;
$datos[edad] = 32;
$datos[email] = grodriguez@escueladavinci.net;
foreach($datos as $valor){
echo $valor . <br /> ;
}
Lo que hace ese $datos as $valor es, en cada vuelta, pedir el valor de la posicin del array
donde est parado. Por lo cual lo que realiza el ciclo foreach es en cada vuelta el siguiente
recorrido:
//vuelta 1: $valor levanta el nombre:
echo $valor . "<br />"; $valor = $datos['nombre'] muestra Germn
//vuelta 2: $valor levanta apellido:
echo $valor . "<br />"; $valor = $datos['apellido'] muestra Rodrguez
Clientes Web
03. Estructura de datos: Arrays
//vuelta 3: $valor levanta edad:
echo $valor . "<br />"; $valor = $datos['edad'] muestra 32
//vuelta 4: $valor levanta email:
echo $valor . "<br />"; $valor=$datos['email']muestra grodriguez@escueladavinci.net
Por ltimo, si al foreach se le indican dos variables despus del as asumir que se est pidiendo
en la primera variable el valor que se encuentra el corchete y en la segunda variable el valor
del contenido (despus del igual), para usar esta modalidad es necesario unir las dos
variables con el operador => (igual-mayor), respetando la siguiente sintaxis:
foreach( $array as $variable_del_corchete => $variable_del_valor ){ }
Por ejemplo:
$datos = array();
$datos[nombre] = Germn;
$datos[apellido] = Rodrguez;
$datos[edad] = 32;
$datos[email] = grodriguez@escueladavinci.net;
foreach(var $datos as $corchete=>$valor ){
echo $corchete . : . $valor . <br /> ; //muestro el valor del corchete y el
contenido de esa posicin
}
Este ejemplo muestra el valor del ndice de cada vuelta (en la variable $corchete) y el valor de
la posicin en cuestin (en $valor), por lo cual el foreach procesa la informacin de la siguiente
manera:
//vuelta 1: $corchete
echo $corchete . ": "
//vuelta 2: $corchete
echo $corchete . ": "
//vuelta 3: $corchete
echo $corchete . ": "
//vuelta 4: $corchete
echo $corchete . ": "
Clientes Web
03. Estructura de datos: Arrays
Bajo esta premisa, la botonera de un sitio web o los contenidos de un elemento SELECT de
formulario, tambin podran encajar en el concepto de plantilla (en definitiva los tems del
men as como las opciones del select son las mismas etiquetas y cambian slo su contenido).
Y ms an, el concepto de Array asociativo permite explotar dos valores por cada iteracin del
Array (por un lado el ndice y por otro lado el contenido).
Entonces, podramos partir de un Array asociativo que tenga en los ndices un texto a mostrar y
en sus valores las URL a navegar:
$menu = array(
home => index.php,
quienes somos => about_us.php,
contacto => contact_us.php
);
Para armar la botonera necesitaramos un ciclo foreach, para capturar tanto los ndices como
los valores de cada posicin del Array, y dentro del men reemplazar los valores con las
variables que obtienen dicha informacin:
foreach($menu as $texto => $url ){
//en cada vuelta, $texto tiene el corchete: home, quienes somos, contacto
//mientras que $url tiene los archivos: index.php, about_us.php, contact_us.php
echo ' | <a href="'.$url.'">'.$texto.'</a> | ';
}
Entonces, la misma lgica se podra aplicar a todo conjunto de datos que sea un juego de pares
(qu texto => qu contenido).
Ejemplos prcticos son opciones de formulario (select, radio, checkbox), galera de fotos (src y
alt), y dems juegos de pares del HTML.
ARRAYS MULTIDIMENSIONALES:
Los arrays, permiten guardar dentro de sus posiciones otro array. Esta prctica se conoce como
arrays multidimensionales (con ms de una dimensin) o matrices.
Para entenderlo de la manera ms simple, podramos imaginarnos una batalla naval, que tiene
un eje con la letra y otro eje con el nmero que queremos atacar, como muestra la imagen a
continuacin:
Clientes Web
03. Estructura de datos: Arrays
En este juego, para atacar una posicin, solo hace indicar, una letra y un nmero, ejemplo:
Celda A-1.
En el caso de un array adentro de otro, la idea es la misma.
Si tengo un array formado por los siguientes datos:
$datos = array() ; //array vacio
$datos[0] = array( a,b,c ) ; //un array adentro de la posicin cero de datos
$datos[1] = array( 1,2,3 ) ; //otro array adentro de la posicin uno de datos
$datos[2] = array( i,ii,iii) ; //otro array adentro de la posicin tres de datos
Esto me genera una matriz de datos de la siguiente manera (las filas representan las posiciones
del array datos, las columnas representan los sub-arrays adentro de cada posicin de datos):
Datos | subindice
0
1
2
0
"a"
1
"i"
1
"b"
2
"ii"
2
"c"
3
"iii"
Al igual que la batalla naval, para llegar al valor "ii" necesito decirle que me muestre datos 21. Esto se realiza mediante la sucesin de corchetes por cada "nivel" al que quiero entrar, as
que ese datos 2-1 no es otra cosa que un $datos[2][1] (del array $datos, la posicin 2. Y del
array adentro de $datos[2] la posicin 1).
La nica diferencia entre una batalla naval y los arrays multidimensionales, radica en que cada
sub-array, puede tener un largo distinto al otro, por lo cual no siempre se forma una grilla
"cuadrada". Por ejemplo:
$datos = array();
$datos[0] = array( hola,chau] ;
$datos[1] = array( a,e,i,o,u);
$datos[2] = array( pepe,jose,juan) ;
Clientes Web
03. Estructura de datos: Arrays
Esto genera un array multidimensional con la siguiente estructura:
0
1
2
'hola'
'a'
'pepe'
'chau'
'e'
'jose'
'i'
'juan'
'o'
'u'
Por lo cual, cada posicin de datos, puede tener arrays de distintos largos.
Para mostrar TODOS los valores de los arrays dentro del array datos, es necesario hacer una
rutina de for anidados (uno adentro del otro).
El primer for, recorrer el largo de datos (nos dar las posiciones 0,1,2) y luego adentro de
cada posicin hacemos otro for, que recorrer el largo de datos[primerFor] que nos dar la
cantidad de posiciones que tiene el array adentro de cada posicin de datos.
Continuemos con el array datos que se us anteriormente:
$largo = count( $datos ); //esto devuelve 3, datos[0] datos[1] datos[2]
$subLargo; //esto lo voy a usar para saber cuanto mide cada array adentro de las
posiciones de datos.
for($i = 0; $i < largo; $i++){ //recorro el array de afuera.
echo <br /><br /><b>Estamos en la posicion: . $i . de datos</b><br />); //un
dato informativo
$subLargo = count( $datos[$i] ) ; //de la posicin en la que est parado, levanto la
cantidad de posiciones.
for($j=0; $j < $subLargo; $j++){ //recorro los arrays de adentro
echo $datos[$i][$j] . <br /> ;
}
}
Esto recorre con el primer for $i, todas los niveles de datos, y por CADA nivel, con el for $j,
todas las posiciones del array dentro del nivel $datos[$i] que corresponda.
Clientes Web
03. Estructura de datos: Arrays
$materias = array(
Clientes Web => Sitio con backend y validacin de datos,
Programacin II => Base de datos de un sitio dinmico,
Sistemas Operativos II => Instalacin y configuracin de Servidor
Linux completo
);
Hasta ac el modelo nos sirve. Los ndices son los nombres de materia y los valores cada final.
Pero qu sucede cuando tenemos que almacenar por cada materia el primer parcial, el
segundo, el TP (si existe) y su final??
Ac no nos alcanzan los dos "espacios" que nos ofrecen el ndice y su valor.
Existen dos soluciones, la primera (menos recomendable) es tener 4 variables de tipo Array
distintas (una para todos los Parcial1, otra para todos los Parcial2, otra para todos los TPs y
una ltima para todos los finales), eventualmente se vuelve inmanejable y el programador debe
controlar "a ojo" los contenidos de cada vector para asegurarse la correlatividad de ndices
entre cada variable.
La otra opcin (ms saludable) es usar una matriz, donde por cada materia exista un sub-array
con las cuatro instancias evaluativas:
$materias = array(
Clientes Web => array(
Parcial 1 => Sitio web con arrays y funciones,
Parcial 2 => Validacin de datos con expresiones regulares,
TP => Sitio web bsico con backend,
FINAL => Sitio con backend y validacin de datos
),
Programacin II => array(
Parcial 1 => Diagrama, creacin de tablas e insercin de datos,
Parcial 2 => Consultas avanzadas y parseo de datos desde el SQL,
TP => Diagrama entidad-relacin,
FINAL=>Base de datos de un sitio dinmico
),
Sistemas Operativos II => array(
Parcial 1 => Usuarios grupos, carpetas, archivos y permisos,
Parcial 2 => Configuracin del servidor WEB y FTP,
FINAL => Instalacin y configuracin de Servidor Linux completo
)
);
Todo lo que figura en negrita son los ndices del array asociativo $materias.
Luego, por cada posicin del array de materias, existe un array con las tres instancias de
evaluacin que corresponden a esa materia.
10
Clientes Web
03. Estructura de datos: Arrays
Cabe destacar que por tener un array adentro de otro array, debemos anidar los foreach que
los recorren:
foreach($materias as $nombre_materia => $sub_array ){
echo "<h1>$nombre_materia</h1>";
11
Clientes Web
03. Estructura de datos: Arrays
sort: ordena en base a los valores de mayor a menor (de la A-Z) reacomodando los
ndices.
rsort: ordena en base a los valores de menor a mayor (de la Z-A) reacomodando los
ndices.
ksort: ordena en base a los ndices de mayor a menor (de la A-Z) conservando la
relacin ndice=>valor.
krsort: ordena en base a los ndices de menor a mayor (de la Z-A) conservando la
relacin ndice=>valor.
12
Clientes Web
03. Estructura de datos: Arrays
VERIFICAR CONTENIDOS:
Como desarrolladores, podemos verificar dos cosas distintas en un array.
1. Verificar si un elemento (o ndice) existe en un array. Esta funcin es VITAL para los
desarrolladores, ya que si queremos mostrar un ndice inexistente veremos un mensaje
de error del intrprete de PHP. Se usa la funcin isset( ) y recibe como argumento el
ndice al que queremos acceder (con su respectivo nombre de variable, lgicamente).
Devuelve true si existe, false si no existe.
2. Verificar si un valor existe en un array.
Se usa la funcin in_array( ) que recibe dos argumentos: Qu valor buscamos y en qu
array lo estamos buscando. Devuelve true si existe. False si no est.
13