Listado completo de tutoriales

Temario del Tutorial17 - Vectores (asociativos)


Este tipo de vectores no es común a otros lenguajes, pero en PHP son de uso indispensable en distintas situaciones (ya lo empleamos cuando recuperamos información de un formulario accediendo al vector $_REQUEST que crea PHP en forma automática, cuando accedamos a datos de una base de datos también lo emplearemos etc.)

Un vector asociativo permite acceder a un elemento del vector por medio de un subíndice de tipo string.

Inicialmente uno piensa que esto nos complica las cosas, como veremos más adelante la realidad nos demuestra lo contrario.

Como ejemplo, consideremos que deseamos guardar en un vector el DNI, nombre y dirección de una persona. Empleando un vector con subíndice entero la solución sería:

<?php
$registro[] = "20456322";
$registro[] = "Martinez Pablo";
$registro[] = "Colon 134";
?>

De esta forma debemos recordar que cuando deseamos mostrar el nombre de la persona debemos acceder al subíndice 1. Esto es sencillo si tenemos un vector con tres elementos, pero que sucede si debemos almacenar 20 datos relacionados en un vector.

Un vector asociativo se define de la siguiente forma:

<?php
$registro['dni'] = "20456322";
$registro['nombre'] = "Martinez Pablo";
$registro['direccion'] = "Colon 134";
echo $registro['nombre'];
?>

Ahora vemos que para imprimir el nombre de la persona no debemos recordar una posición dentro de un vector sino un nombre de clave. Esto se hace indispensable cuando administramos un conjunto de datos grandes.

En un vector asociativo toda componente está asociada a una clave.

Otras formas de crear un vector asociativo:

<?php
$registro = array(
  'dni' => '20456322',
  'nombre' => 'Martinez Pablo',
  'direccion' => 'Colon 134'
);
echo $registro['dni'];
?>

Acotaciones

Cuando tenemos que recorrer en forma completa un vector asociativo en PHP podemos utilizar la estructura 'foreach'. Veamos un ejemplo:

pagina1.php

<html>

<head>
  <title>Problema</title>
</head>

<body>

  <?php
  $articulo = array(
    'codigo' => 1,
    'descripcion' => 'manzanas',
    'precio' => 30.25
  );

  foreach ($articulo as $clave => $valor) {
    echo 'Para la clave :' . $clave . " almacena el valor: " . $valor;
    echo "<br>";
  }
  ?>

</body>

</html>

En cada repetición del 'foreach' la variable $clave almacena el subíndice del vector y la variable $valor contiene el valor de la componente del vector:

  foreach ($articulo as $clave => $valor) {
    echo 'Para la clave :' . $clave . " almacena el valor: " . $valor;
    echo "<br>";
  }

Luego se muestra al ejecutar la aplicación:

Para la clave :codigo almacena el valor: 1
Para la clave :descripcion almacena el valor: manzanas
Para la clave :precio almacena el valor: 30.25

Podemos recorrer el vector asociativo $_REQUEST mediante un foreach e imprimir tanto la clave como el valor.

Desarrollaremos una aplicación que solicite la carga de 5 números en un formulario HTML y al presionar un botón se calcule la suma en el servidor.

pagina1.html

<head>
  <title>Problema</title>
</head>

<body>
  <form action="pagina2.php" method="post">
    Ingrese primer valor:
    <input type="text" name="valor1">
    <br>
    Ingrese segundo valor:
    <input type="text" name="valor2">
    <br>
    Ingrese tercer valor:
    <input type="text" name="valor3">
    <br>
    Ingrese cuarto valor:
    <input type="text" name="valor4">
    <br>
    Ingrese quinto valor:
    <input type="text" name="valor5">
    <br>
    <input type="submit">
  </form>
</body>

</html>

Es importante notar que al input de tipo 'submit' no le definimos la propiedad 'name', con el objetivo que no se cargue en el vector asociativo '$_REQUEST'.

Ahora la página que suma todos los valores ingresados es:

pagina2.php

<html>

<head>
  <title>Problema</title>
</head>

<body>
  <?php
  $suma = 0;
  foreach ($_REQUEST as $clave => $valor) {
    echo "Valor: " . $valor;
    echo "<br>";
    $suma = $suma + $valor;
  }
  echo "La suma es: " . $suma;
  ?>
</body>

</html>

Como vemos podemos recorrer en forma completa los 5 elementos del vector '$_REQUEST' y acceder tanto a su valor como su clave:

  $suma = 0;
  foreach ($_REQUEST as $clave => $valor) {
    echo "Valor: " . $valor;
    echo "<br>";
    $suma = $suma + $valor;
  }

Si solo queremos acceder a los valores del vector asociativo y no a sus claves, luego podemos codificar la sintaxis del foreach:

  foreach ($_REQUEST as $valor) {
    echo "Valor: " . $valor;
    echo "<br>";
    $suma = $suma + $valor;
  }



Problema resuelto.

Copiar el contenido de este cuadro de texto al VS Code y almacenarlo en la carpeta c:\xampp\htdocs con un nombre con extensión php.
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)

pagina1.php

Ejecutar ejemplo

Problema propuesto.

Crear un vector asociativo que almacene las claves de acceso de 5 usuarios de un sistema. Acceder a cada componente por su nombre. Imprimir una componente del vector.

Solución
pagina1.php

Ejecutar ejemplo

Retornar