JTagua

Inicio » PHP » Tipos compuestos » array » Tutorial PHP(9): Tipo array.

Tutorial PHP(9): Tipo array.

Licencia

Creative Commons License

Visitas:

  • 792.444 hits
Anuncios

Arrays

Un array en PHP es realmente un mapa ordenado, es decir, un tipo de datos que asocia valores con claves. Este tipo puede usarse como una matriz real, una lista o vector, un diccionario, una colección, una pila, una cola, etc … Ya que los valores de un array pueden ser otros arrays, árboles y también son posibles arrays multidimensionales.

Los elementos del array son datos que están asociados, a su vez, a un elemento del array llamado índice. Supongamos el array nombre[0], nombre[1], nombre[2]. El nombre de variable para el array es “nombre” mientras que los índices son 0, 1 y 2.

El índice se caracteriza por conectar los elementos del array por medio de una numeración que empieza por cero. Así, el primer elemento del array tiene índice cero, el segundo tiene índice uno, y así sucesivamente.

Pero en realidad, resulta que este índice es numérico solo por defecto; es decir, tenemos la posibilidad de crear nuestro propio índice dentro de un array. Cuando hacemos esto, estamos convirtiendo el array en lo que se denomina un array asociativo.

Sintaxis

Especificación con array().

Un array se crea con el constructor del lenguaje array(), formando  parejas clave => valor como argumentos.

    array(
    0 => valor1,
    1 => valor2,
    2 => valor3,
    ...
   )

o un array asociativo

 array( clave0 => valor1, clave1 => valor2, clave2 => valor3, ... )

La coma después del elemento del array es opcional y se puede omitir.

A partir de PHP 5.4 también se puede usar la sintaxis de array corta, que reemplaza array() con [].

Ejemplo: Un array simple

<?php
 $vector = array(
 "1" => "uno",
 "2" => "dos",
 );
// a partir de PHP 5.4
 $vector = [
 "uno" => "1",
 "dos" => "2",
 ];
 ?>

La clave puede ser un integer o un string. El valor puede ser de cualquier tipo.

<?php
 $moneda=array("espana"=> "Euro","Reino Unido" => "Libra","USA" => "Dolar");
 ?>

o lo que es lo mismo,

<?php
 $moneda["espana"]="Euro";
 $moneda["Reino Unido"]="Libra";
 $moneda["USA"]="Dolar";
 ?>

Ejemplo: Un array multidimensional

Una forma muy practica de almacenar datos es mediante la creación de arrays multidimensionales (tablas). Pongamos el ejemplo siguiente: Queremos almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada país. Para hacerlo podemos emplear un array llamado país que vendrá definido por estas tres características (claves). Para crearlo, deberíamos escribir una expresión del mismo tipo que la vista anteriormente en la que meteremos una array dentro del otro. Este proceso de incluir una instruccion dentro de otra se llama anidar y es muy corriente en programación:

<?php
 $pais=array
 (
 "espana" =>array
    (
    "capital"=>"Madrid",
    "lengua"=>"Castellano",
    "moneda"=>"Euro"
    ),
 "Reino Unido" =>array
    (
    "capital"=>"Londres",
    "lengua"=>"Inglés",
    "moneda"=>"Libra"
    )
 );
 echo $pais["espana"]["moneda"] //Saca en pantalla: "Euro"
 ?>

Los elementos de array se pueden acceder utilizando la sintaxis array[key].

Tanto los corchetes como las llaves pueden ser utilizadas de forma indiferente para acceder a elementos de un array (por ejemplo: $array[42] and $array{42} harán lo mismo).
Para cambiar un valor determinado, se debe asignar un nuevo valor a ese elemento con su clave.
Para quitar un par clave/valor, se debe llamar la función unset().

<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56;    // Esto es lo mismo que $arr[13] = 56; en este punto de el script porque la última clave fue 12
$arr["x"] = 42; // Esto agrega un nuevo elemento a el array con la clave "x"
?>

A veces no es necesario especificar la clave. PHP la asume como un número entero creciente de unidad en unidad

</pre>
<?php

$ciudad[] = "Sevilla";

$ciudad[] = "Madrid";

$ciudad[] = "Barcelona";

$ciudad[] = "Valencia";

echo $ciudad[3];

?>

 


Funciones útiles.

current – devuelve el valor del elemento que indica el puntero

pos – realiza la misma función que current

reset – mueve el puntero al primer elemento de la tabla

end – mueve el puntero al último elemento de la tabla

next – mueve el puntero al elemento siquiente

prev – mueve el puntero al elemento anterior

count – devuelve el número de elementos de una tabla.

Veamos un ejemplo de las funciones anteriores:
<?php
$semana = array("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domindo");
echo count($semana); //Mostramos el número de elementos
//situamos el puntero en el primer elemento
reset($semana);
echo current($semana); //lunes
next($semana);
echo pos($semana); //martes
end($semana);
echo pos($semana); //domingo
prev($semana);
echo current($semana); //sábado
?>

Recorrido de arrays mediante el bucle for

<?php
$array[0] = "Uno";
$array[1] = "Dos";
$array[2] = "Tres";
$array[3] = "Cuatro";
$array[4] = "Cinco";
$array[5] = "Seis";
$array[6] = "Siete";
$array[7] = "Ocho";

for($i=0;$i <= 7; $i++)
{
echo $array[$i].'<br />';
}
?>

Recorrer una tabla con las funciones list y each

<?php
$visitas = array("lunes"=>200, "martes"=>186, "miércoles"=>190, "jueves"=>175);
reset($visitas);
while (list($clave, $valor) = each($visitas))
{
echo "el día $clave ha tenido $valor visitas<BR>";
}
?>

La función each() devuelve el valor del elemento actual, en este caso, el valor del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al final devuelve FALSO, y termina el bucle while()

Recorrido de arrays mediante foreach

Este tipo de recorridos se suele usar cuando obtenemos datos de una base de datos.

El tipo de array que nos suele devolver una consulta a la base de datos es similar al siguiente:

$resultado = array(

array('nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'),

array('nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'),

array('nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'),

 

...

array('nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896'),

);

<?php
$rows = array(
array( 'nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'),
array( 'nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'),
array( 'nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'),
array( 'nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896')
);

foreach($rows as $valor) {
echo 'Nombre: ' . $valor['nombre'] . '<br />';
}
?>

array_slice()

Para disminuir el número de casillas de un arreglo tenemos varias funciones. Entre ellas, array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los índices de las casillas que deseamos conservar.

Recibe tres parámetros. El array, el índice del primer elemento y el número de elementos a tomar, siendo este último parámetro opcional.

En el ejemplo siguiente tenemos un array con cuatro nombres propios. En la primera ejecución de array_slice() estamos indicando que deseamos tomar todos los elementos desde el índice 0 (el principio) hasta un número total de 3 elementos.

El segundo array_slice() indica que se tomen todos los elementos a partir del índice 1 (segunda casilla).

<?php
 $entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");
 //modifico el tamaño
 $salida = array_slice ($entrada, 0, 3);
 //muestro el array
 foreach ($salida as $actual)
     echo $actual . "<br>";
echo "<p>";

//modifico otra vez
 $salida = array_slice ($salida, 1);
 //muestro el array
 foreach ($salida as $actual)
     echo $actual . "<br>";
 ?>

Tendrá como salida:

Miguel
Pepe
Juan

Pepe
Juan

array_shift()
Esta función extrae el el primer elemento del array y lo devuelve. Además, acorta la longitud del array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto, no recibirá más que el array al que se desea eliminar la primera posición.

En el código siguiente se tiene el mismo vector con nombres propios y se ejecuta dos veces la función array_shift() eliminando un elemento en cada ocasión. Se imprimen los valores que devuelve la función y los elementos del array resultante de eliminar la primera casilla.

<?php
 $entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//quito la primera casilla
 $salida = array_shift ($entrada);
 //muestro el array
 echo "La función devuelve: " . $salida . "<br>";
 foreach ($entrada as $actual)
     echo $actual . "<br>";

echo "<p>";

//quito la primera casilla, que ahora sería la segunda del array original
 $salida = array_shift ($entrada);
 echo "La función devuelve: " . $salida . "<br>";
 //muestro el array
 foreach ($entrada as $actual)
     echo $actual . "<br>";
 ?>

Da como resultado:

La función devuelve: Miguel
Pepe
Juan
Julio
Pablo

La función devuelve: Pepe
Juan
Julio
Pablo

unset()
Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para eliminar una casilla de un array asociativo (los que no tienen índices numéricos sino que su índice es una cadena de caracteres).

Veamos el siguiente código para conocer cómo definir un array asociativo y eliminar luego una de sus casillas.

<?php
 $estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta");

//mostramos los estadios
 foreach ($estadios_futbol as $indice=>$actual)
     echo $indice . " -- " . $actual . "<br>";

echo "<p>";

//eliminamos el estadio asociado al real madrid
 unset ($estadios_futbol["Real Madrid"]);

//mostramos los estadios otra vez
 foreach ($estadios_futbol as $indice=>$actual)
 echo $indice . " -- " . $actual . "<br>";
 ?>

La salida será la siguiente:

Barcelona -- Nou Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- Anoeta

Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta

array_push()
Inserta al final del array una serie de casillas que se le indiquen por parámetro. Por tanto, el número de casillas del array aumentará en tantos elementos como se hayan indicado en el parámetro de la función. Devuelve el número de casillas del array resultante.

Veamos este código donde se crea un arreglo y se añaden luego tres nuevos valores.

<?php
 $tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");

//aumentamos el tamaño del array
 array_push($tabla, "Gorrión", "Paloma", "Oso");

foreach ($tabla as $actual)
     echo $actual . "<br>";
 ?>

Da como resultado esta salida:

Lagartija
Araña
Perro
Gato
Ratón
Gorrión
Paloma
Oso

array_merge()
Ahora vamos a ver cómo unir dos arrays utilizando la función array_merge(). A ésta se le pasan dos o más arrays por parámetro y devuelve un arreglo con todos los campos de los vectores pasados.

En este código de ejemplo creamos tres arrays y luego los unimos con la función array_merge()

<?php
 $tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");
 $tabla2 = array ("12","34","45","52","12");
 $tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");

//aumentamos el tamaño del array
 $resultado = array_merge($tabla, $tabla2, $tabla3);

foreach ($resultado as $actual)
     echo $actual . "<br>";
 ?>

Da como resultado:

Lagartija
Araña
Perro
Gato
Ratón
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34

sort()

Es la función más básica para ordenar arrays en PHP. Ordena el array de valores menores a mayores. Lo vemos con un ejemplo.

<?php
//Ordenar desde el menor al mayor
 $alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo");
 sort($alumnos);
 foreach ($alumnos as $key => $val) {
     echo "alumnos[" . $key . "] = " . $val . "";
 }

Que dará como resultado:
alumnos[0] = Alberto
alumnos[1] = Gerardo
alumnos[2] = Juan
alumnos[3] = Marcelo
alumnos[4] = Pepe

rsort()

Esta función ordena el array por valores. La "r" delante quiere decir que ordena en orden reverso, de mayor a menor.

<?php
//ordenar de mayor a menor (orden inverso... Reverse order)
 $alumnos = array("Pepe", "Juan", "Marcelo", "Alberto", "Gerardo");
 rsort($alumnos);
 foreach ($alumnos as $key => $val) {
     echo "alumnos[" . $key . "] = " . $val . "";
 }

Que daría como respuesta:
alumnos[0] = Pepe
alumnos[1] = Marcelo
alumnos[2] = Juan
alumnos[3] = Gerardo
alumnos[4] = Alberto

ksort()

También podemos ordenar un array por el índice o llave, que quiere decir que en lugar de ordenar atendiendo a los valores, se ordenaría atendiendo al índice que tienen. Para ver este ejemplo utilizaremos arrays asociativos, que son los que tienen índices de texto en vez de números.

En el array siguiente vemos que tenemos índices como "h", "e", "a", en lugar de números. Lo que hará este tipo de ordenación es fijarse en esos índices para poner el array ordenado por ellos.

<?php
//Ordenar arrays por su índice
 $calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral");
 ksort($calles);
 foreach ($calles as $key => $val) {
     echo $key ." = " . $val . "";
 }

Esto dará como resultado esta ordenación:
a = Bailén
e = Castellana
h = Leganitos
z = Fuencarral

krsort()

También podemos ordenar por índices pero en sentido inverso. Es decir, por índices pero de mayor a menor.

//ordenar por índice o clave, pero en orden inverso

<?php
 $calles = array("h"=>"Leganitos", "e"=>"Castellana", "a"=>"Bailén", "z"=>"Fuencarral");
 krsort($calles);
 foreach ($calles as $key => $val) {
     echo $key ." = " . $val . "";
 }

En este caso el resultado sería el siguiente:

z = Fuencarral
h = Leganitos
e = Castellana
a = Bailén

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: