15, octubre - 2018

Uso de matrices (arrays) en PHP

Uso de matrices (arrays) en PHP

Las matrices son una de las estructuras de programación más importantes en PHP, se trata de variables que pueden almacenar una gran cantidad de información en formato tabla, cada dato de esa variable se denomina un elemento de matriz. Cada elemento de matriz puede almacenar un único valor, éste podrá ser tanto un número (integrer) como una cadena de texto (string), un valor booleano (true/false) u otra matriz (array) en ese caso la matriz se convierte en un array multidimensional.

En PHP podemos crear tanto matrices indexadas numéricamente como indexadas por un valor, asociativas. Por ejemplo array(“valor uno”, “valor dos”, “valor tres”) será una matriz indexada numéricamente, ya que para acceder a cada uno de los valores nos referiremos a ellos con un número empezando por cero, de esa forma, para acceder al elemento “valor dos” escribiríamos array[1] (el primero elemento del array es el 0, de esa forma el 1 será el segundo elemento y el que buscábamos en este ejemplo), sin embargo si escribimos array(“Índice 1″=>”valor uno”, “Índice 2″=>”valor dos”, “Índice 3″=>”valor tres”), para acceder a ese mismo elemento sería array[“Índice dos”] ya que está indexada de forma relacional o asociativa, en lugar de usar un número usamos un valor alfanumérico.

Después de dar valores a los elementos de una matriz se puede trabajar sobre ellos de varias formas útiles, por ejemplo, con las estructuras de repetición o bucles para ver el contenido completo de la matriz u operar con ella, también podemos aplicar funciones preestablecidas de PHP para realizar acciones concretas.

Matrices indexadas de forma numérica

Comencemos por este tipo de matrices, los indexados de forma numérica, no son los que más se utilizan dado que después trabajar con ellos es más difícil pero sí se utilizan para crear arrays simples. Como ya hemos visto estos arrays se indexan con un número que comenzará por cero como vemos a continuación:

///////////////////////////////////////////////////////////
$ar = array("valor uno", "valor dos", "valor tres"); // declaramos el array ar con tres valores indexados de forma numérica
echo $ar[0]; // devuelve valor uno
echo $ar[1]; // devuelve valor dos
echo $ar[2]; // devuelve valor tres
$ar[3] = "un nuevo valor";
echo $ar[3]; // devuelve el nuevo valor un nuevo valor
///////////////////////////////////////////////////////////
$ardos[0] = "valor ardos uno";
$ardos[1] = "valor ardos dos";
$ardos[2] = "valor ardos tres";
///////////////////////////////////////////////////////////
$artres = range(1, 3);
echo $artres[0]; // devuelve 1
echo $artres[1]; // devuelve 2
echo $artres[2]; // devuelve 3
///////////////////////////////////////////////////////////
$arcuatro = range("a", "c");
echo $arcuatro[0]; // devuelve a
echo $arcuatro[1]; // devuelve b
echo $arcuatro[2]; // devuelve c
///////////////////////////////////////////////////////////

Como vemos existen varias formas de declarar arrays indexados numéricamente, entre ellos, la función de arrays range para declarar rangos automáticos de arrays.

Matrices indexadas de forma asociativa

Son las más utilizadas en PHP por su facilidad a la hora de acceder a un determinado valor dentro de la matriz, este tipo de matrices difieren de las anteriores en que su forma de indexación es a través de una cadena alfanumérica, veamos cómo:

///////////////////////////////////////////////////////////
$ar = array(
"In1" => "valor uno";
"In2" => "valor dos";
"In3" => "valor tres";
);
echo $ar["In1"]; // devuelve valor uno
echo $ar["In2"]; // devuelve valor dos
echo $ar["In3"]; // devuelve valor tres
$ar["In4"] = "valor cuatro";
///////////////////////////////////////////////////////////

Como vemos, para acceder a alguno de los valores declarados en lugar de indicar su número de forma numérica lo hacemos de forma asociativa, escribiendo el valor que le hayamos dado a ese índice.

Nota: Una matriz declarada de forma numérica nunca se podrá acceder al contenido de los valores de forma asociativa y viceversa, una matriz asociativa únicamente se podrá acceder a los valores que contiene usando el índice asociativo.

Matrices multidimensionales indexadas de forma numérica

Una matriz multidimensional es un array que en su interior contiene más arrays, de esa forma, podemos crear un conjunto de valores en formato tabla con las dimensiones que deseemos, por lo general no más de tres dada su complejidad a la hora de acceder a los datos, estos arrays multidimensionales pueden contener un índice tanto numérico como asociativo, veamos los primeros con estos ejemplos

///////////////////////////////////////////////////////////
$arm = array(
array("valor múltiple uno uno", "valor múltiple uno dos", "valor múltiple uno tres"),
array("valor múltiple dos uno", "valor múltiple dos dos", "valor múltiple dos tres"),
array("valor múltiple tres uno", "valor múltiple tres dos", "valor múltiple tres tres")
);
echo $arm[0][0]; // devolverá como resultado el valor uno del array uno
echo $arm[1][0]; // devolverá como resultado el valor uno del array dos
echo $arm[2][0]; // devolverá como resultado el valor uno del array tres
$arm[3][0] = "un nuevo valor";
///////////////////////////////////////////////////////////

Se puede ver que cada elemento del array contiene en su interior tres valores más, éstos son accesibles indicando el valor del índice que ocupan, en este caso de forma numérica, y siempre comenzando por cero.

Matrices multidimensionales indexadas de forma asociativa

La otra forma de indexar matrices multidimensionales y la más usada es de forma asociativa, como vemos en el siguiente ejemplo

///////////////////////////////////////////////////////////
$arma = array(
"Ina1" => array("Valor indice Ina1 uno", "Valor indice Ina1 dos", "Valor indice Ina1 tres"),
"Ina2" => array("Valor indice Ina2 uno", "Valor indice Ina2 dos", "Valor indice Ina2 tres"),
"Ina3" => array("Valor indice Ina3 uno", "Valor indice Ina3 dos", "Valor indice Ina3 tres")
);
echo $arma["Ina1"][0]; // devolverá el valor del índice Ina1 posición primera Ina1 uno
echo $arma["Ina2"][0]; // devolverá el valor del índice Ina2 posición primera Ina2 uno
echo $arma["Ina3"][0]; // devolverá el valor del índice Ina3 posición primera Ina3 uno
///////////////////////////////////////////////////////////
$arma2 = array(
"Ina1" => array("Valor1Ina1" => "Valor indice Ina1 uno", "Valor2Ina1" => "Valor indice Ina1 dos", "Valor1Ina3" => "Valor indice Ina1 tres"),
"Ina2" => array("Valor indice Ina2 uno", "Valor indice Ina2 dos", "Valor indice Ina2 tres"),
"Ina3" => array("Valor indice Ina3 uno", "Valor indice Ina3 dos", "Valor indice Ina3 tres")
);
echo $arma2["Ina1"]["Valor1Ina1"]; // devolverá el valor del índice Ina1 posición primera indexada con el identificador Valor1Ina1 Ina1 uno
echo $arma2["Ina2"][0]; // devolverá el valor del índice Ina2 posición primera Ina2 uno
echo $arma2["Ina3"][0]; // devolverá el valor del índice Ina3 posición primera Ina3 uno
///////////////////////////////////////////////////////////
$arma3 = array(
"Frutas" => array("Peras" => 2, "Naranjas" => 5, "Sandias" => 1),
"Verduras" => array("Tomates" => 12, "Cebollas" => 7, "Zanahorias" => false),
"Panes" => array("Integral" => "sano", "Ecologico" => "respetable", "Centeno" => "saludable")
);
echo $arma3["Frutas"]["Naranjas"]; // devolverá el valor 5
echo $arma3["Verduras"]["Tomates"]; // devolverá el valor 12
echo $arma3["Panes"]["Centeno"]; // devolverá el valor saludable
///////////////////////////////////////////////////////////

Como vemos en el ejemplo, existen múltiples formas de declarar un array multidimensional, incluso, de mezclar los índices asociativos y numéricos en el mismo array, pero no de llamarlos, si un elemento del array está indexado de forma numérica, le llamaremos de la misma manera y viceversa, si está indexado de forma asociativa será así como le llamaremos.

Acceder a los elementos de las matrices

De la misma manera, existen diversas formas de acceder a los elementos de las matrices, podemos imprimir en pantalla la totalidad de elementos que conforman la matriz, de declarar bucles para acceder a ellos, o como hemos visto, de llamarlos declarando el índice exacto que ocupan, vemos las formas restantes.

Imprimir en pantalla todos los elementos de una matriz

Podemos imprimir en pantalla la totalidad de elementos que componen una matriz con las instrucciones var_dump y print_r (recursivo), las dos devolverán similares resultados pero var_dump además nos mostrará el tipo de datos que componen cada uno de los elementos de la matriz:

$arm = array(
array("valor múltiple uno uno", "valor múltiple uno dos", "valor múltiple uno tres"),
array("valor múltiple dos uno", "valor múltiple dos dos", "valor múltiple dos tres"),
array("valor múltiple tres uno", "valor múltiple tres dos", "valor múltiple tres tres")
);
var_dump($arm);
/*
array(3) { [0]=> array(3) { [0]=> string(23) "valor múltiple uno uno" [1]=> string(23) "valor múltiple uno dos" [2]=> string(24) "valor múltiple uno tres" } [1]=> array(3) { [0]=> string(23) "valor múltiple dos uno" [1]=> string(23) "valor múltiple dos dos" [2]=> string(24) "valor múltiple dos tres" } [2]=> array(3) { [0]=> string(24) "valor múltiple tres uno" [1]=> string(24) "valor múltiple tres dos" [2]=> string(25) "valor múltiple tres tres" } }
*/
///////////////////////////////////////////////////////////

Usar bucles para acceder a los elementos de una matriz

Para el caso de matrices multidimensionales es mucho más aconsejable usar bucles para acceder a su contenido ya que de esta forma nos será mucho más sencillo comprender la matriz, usaremos un bucle por cada una de las alturas que componen la matriz:

///////////////////////////////////////////////////////////
$arma3 = array(
"Frutas" => array("Peras" => 2, "Naranjas" => 5, "Sandias" => 1),
"Verduras" => array("Tomates" => 12, "Cebollas" => 7, "Zanaorias" => false),
"Panes" => array("Integral" => "sano", "Ecologico" => "respetable", "Centeno" => "saludable")
);
foreach($arma3 as $index => $value) {
echo $index .": ";
foreach($value as $index2 => $value2){
echo $index2. " - " . $value2 . " ";
}
echo "
";
}
/*
Frutas: Peras - 2 Naranjas - 5 Sandias - 1
Verduras: Tomates - 12 Cebollas - 7 Zanaorias -
Panes: Integral - sano Ecologico - respetable Centeno - saludable
*/
///////////////////////////////////////////////////////////
// Otra forma de acceder por medio de bucles sería la siguiente
$arma3 = array(
"Frutas" => array("Peras" => 2, "Naranjas" => 5, "Sandias" => 1),
"Verduras" => array("Tomates" => 12, "Cebollas" => 7, "Zanaorias" => false),
"Panes" => array("Integral" => "sano", "Ecologico" => "respetable", "Centeno" => "saludable")
);
echo '
<ul>';
while( $array = each ($arma3) ) {
echo '
<li>' . $array['key'] . ":
<ul>";
while( $array2 = each ($array['value']) ) {
echo '
<li>' . $array2['key'] . ' - ' . $array2['value'] . '</li>
';
}
echo '</li>
</ul>
';
}
echo '</ul>
';
/*
Frutas:
Peras - 2
Naranjas - 5
Sandias - 1
Verduras:
Tomates - 12
Cebollas - 7
Zanaorias -
Panes:
Integral - sano
Ecologico - respetable
Centeno - saludable
*/
///////////////////////////////////////////////////////////

Como se puede ver, la forma más sencilla de acceder a los valores almacenados en arrays multidimensionales es por medio del bucle foreach() anidado la particularidad de este bucle es que contiene el operador as para hacer referencia al índice del siguiente nivel de datos y el operador => para acceder a los datos propiamente dichos, una vez visto esto sigamos viendo algunas funciones útiles con el uso de matrices en PHP en la siguiente página ‘Funciones de matrices en PHP’.

¿Te ha parecido interesante este contenido..?
En ese caso, te pedimos por favor que nos des tu valoración graicas a esto podemos mejorar nuestras lecciones. Gracias.
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Social Media

  • YouTube

    Suscríbete a nuestro canal de YouTube para ver todos nuestros vídeos sobre programación

  • Twitter

    Síguenos en Twitter e infórmanos de ello, es muy probable que también te sigamos

  • Facebook

    Estamos pensando si abrir una página de Facebook o no...

  • LinkedIn

    En breve...

  • Instagram

    En breve...

  • Github

    En breve...

A %d blogueros les gusta esto: