duduromeroa.com

Programación web

Ejecutando datos tipo funciones desde elementos de arreglos en PHP (7.4)


www.duduromeroa.com, animación, lector, gif

Por Eduardo Romero

Guayaquil, Ecuador



ATENCIÓN: Los conceptos a continuación requieren de conocimiento previo en fundamentos de programación. Reseñas de otros lenguajes de programación se hallan en este vínculo.



Lo revisado en la sección anterior

En la sección anterior convertimos elementos de arreglo en variables (y viceversa), y recorrimos elementos e índices según ubicación de índices de elementos en arreglos de PHP. Ahora veremos cómo ejecutar funciones desde el contenido de un arreglo; es decir, desde sus elementos.

Combinando un arreglo y una función y ejecutándola con array_walk();

Si definimos un arreglo con elementos clave=>valor, luego una función con parámetros en forma de variable (que representarán a futuro el papel de una clave y de un valor de cada elemento del arreglo); y finalmente aplicamos la función array_walk(nombreArreglo, nombreFuncion); el resultado será la activación del contenido de la función para cada elemento del arreglo.

En .PHP

<?php 

// El arreglo con elementos clave/valor
$frutas = [
"Guayacanes" => "Al norte", 
"Valdivia" => "Al sur", 
"La Chala" => "Suroeste"
];

// Función global
// Parámetros son variables
function mostrarElemento($valor, $clave) {
	// Mostrando los argumentos
    echo "Clave: $clave | Valor: $valor\n";
}

// Aquí indicamos que mediante array_walk()...
// 1er argumento: $frutas es un arrego con elementos clave/valor
// 2do argumento: 'mostrarElemento' es la función que recorre
array_walk($frutas, 'mostrarElemento');

/* RESULTADO:
Clave: Guayacanes | Valor: Al norte
Clave: Valdivia | Valor: Al sur
Clave: La Chala | Valor: Suroeste
*/

?>

Así mismo, para elementos únicos de arreglo, sin la dupla clave/valor, el recurso array_walk() ejecutará el contenido de la función para cada elemento del arreglo. Recordar: aunque los elementos de un arreglo no contengan la dualidad clave/valor, un elemento por sí mismo ya tiene su clave. Esa es su índice natural, desde el cero en adelante para cada elemento "solitario" de un arreglo.

Es por esa razón que, aunque abajo usemos un arreglo con elementos "solitarios" (sin clave explícita) igualmente se necesitará alojar cada índice de elemento en el parámetro $clave de la función alCuadrado().

En .PHP

<?php 
// Arreglo
// Indice---0---1
$numeros = [2, 4];

// El signo '&' altera directamente los elementos del arreglo
// Sin ese signo, los valores no mostrarán alteración
function alCuadrado(&$valor, $clave) {
    $valor = $valor * $valor;
}

// Junta elementos del arreglo con la función
array_walk($numeros, 'alCuadrado');
print_r($numeros);

/*
Array
(
    [0] => 4
    [1] => 16
)
*/
?>

Usando tercer argumento complementario en array_walk();

Recreamos un listado de datos que requieren una clave y un valor que sea un arreglo (con dos claves y dos valores) cada uno:

En concepto


CLAVE----------[CLAVE--VALOR]----[CLAVE--VALOR]----
Tienda sur:     30  naranjas     10 limones
Tienda norte:   10  naranjas      5 limones
Tienda este:     5  naranjas      0 limones

En .PHP

<?php 

// Array base: tiendas y su inventario
// Cada elemento tiene un 2do arreglo como valor
$arreglo_Inventario = [
    "Tienda Sur"   => ["naranjas" => 30, "limones" => 10],
    "Tienda Norte" => ["naranjas" => 10, "limones" => 5],
    "Tienda Este"  => ["naranjas" => 5,  "limones" => 0],
];

// Dato adicional: supervisor general
// Lo acoge el tercer parámetro de funcionMostrarInventario()
$supervisor = "Viejo Napo";

// Aplicamos array_walk con el tercer parámetro
// --------Arreglo----------------función creada-------------dato extra
array_walk($arreglo_Inventario, 'funcionMostrarInventario', $supervisor);

// Función
// Cada parámetro es una variable para cada dato 
function funcionMostrarInventario($frutas, $nombreTienda, $encargado) {
	// Usamos los argumentos que apuntan datos del arreglo
    echo "<strong>$nombreTienda</strong><br/>";
    echo "Naranjas:		{$frutas['naranjas']}<br/>";
    echo "Limones: 		{$frutas['limones']}<br/>";
    echo "Supervisor: 	$encargado<br /><br/>";
}

/* --- RESULTADO
Tienda Sur
Naranjas: 30
Limones: 10
Supervisor: Viejo Napo

Tienda Norte
Naranjas: 10
Limones: 5
Supervisor: Viejo Napo

Tienda Este
Naranjas: 5
Limones: 0
Supervisor: Viejo Napo
*/

?>

Aclaremos algo del ejemplo de arriba: la función funcionMostrarInventario() contiene 3 argumentos:

  • function funcionMostrarInventario(
  • $frutas: Es el valor de cada elemento del array $arreglo_Inventario.
  • $nombreTienda: cada clave de cada elemento
  • $encargado: el dato del nombre
  • )

Sin embargo, la variable $frutas se comporta tal cual apuntáramos al valor de uno de los elementos del arreglo:

En .PHP

<?php 

$arr = [
"Tienda" => ["naranjas" => 30, "limones" => 10]
];

// -------CLAVE----IDENTIFICADOR DE VALOR
echo $arr['Tienda']['naranjas'] . "\n";
// 30

echo $arr['Tienda']['limones'] . "\n";
// 10

?>

Y esto es importante por que debemos recordar siempre lo siguiente: cuando debemos apuntar a un valor de elemento en arreglo asociativo en PHP, SIEMPRE DEBEMOS LLAMAR A LA CLAVE (al nombre único de cada fila); y luego AL NOMBRE IDENTIFICADOR DE CADA VALOR.