list, extract y compact, funciones sencillas pero utiles de PHP

Muchas veces, nos pasa que al aprender un nuevo lenguaje de programacion, nos encontramos con funciones que aparentemente, son simples, y no tienen mucha utilidad, pero con el paso del tiempo, nos damos cuenta, que nos pueden sacar de apuros, e incluso hacen ver nuestro codigo mas limpio, e incluso mas profesional.

Este es el caso, de 3 funciones (2 realmente, la otra es una construccion del lenguaje), muy simples de PHP, que nos pueden ayudar a simplificar nuestro codigo y ahorrarnos tiempo y trabajo.

La primera que veremos es list():

list()  es una construccion del lenguaje, que nos permite asignar valores a un conjunto de variables, en un solo paso, para entenderlo de mejor forma, veamoslo con un ejemplo:

Supongase que tenemos el arreglo:

$arreglo = array(‘solido’, ‘liquido’, ‘gaseoso’);

Si quisieramos asignar cada uno de los valores del arreglo a variables, normalmente hariamos lo siguiente:

$estado1 = $arreglo[0];
$estado2 = $arreglo[1];
$estado3 = $arreglo[2];

Y aqui es donde la funcion list() nos puede a ayudar a hacer nuestro codigo mas facil de leer y tambien mas reducido, veamos como podemos hacerlo:

list($estado1, $estado2, $estado3) = $arreglo;

list() lo que hace es mapear cada uno de los elementos del arreglo, a cada una de las variables enviadas como argumento a la funcion, empezando desde el indice 0 por supuesto. Pero no todo es perfecto, y el unico inconveniente con la funcion list() es que solo funciona para arreglos con indices numericos.

Pero no todo esta perdido, para eso PHP nos ofrece otra alternativa, y es la funcion extract

extract() nos permite mapear cada uno de los elementos de una matriz asociativa a la tabla de simbolos actual, por ejemplo:

Supongamos que tenemos el siguiente arreglo asociativo

$tupla = array(‘nombre’ => ‘Maria’, ‘edad’ => 22, ‘estado_civil’ => ‘soltera’);

Normalmente, lo que hariamos para utilizar individualmente cada uno de los valores del arreglo, seria lo siguiente:

$nombre = $tupla[‘nombre’];
$edad = $tupla[‘edad’];
$estado_civil = $tupla[‘estado_civil’];

Lo cual, es valido, pero un poco tedioso, mas cuando se trata de un arreglo de muchos elementos, cosa que se puede hacer en una sola linea, utlizando la funcion extract(), veamos como:

extract($tupla);
echo «$nombre, $edad, $estado_civil \n»;

Lo que nos retornaria:

Maria, 22, soltera

Como podemos ver, es una funcion simple, pero nos permitiria ahorrar algunas lineas de codigo, y nos seria de mucha utilidad por ejemplo, cuando necesitamos obtener una tupla de la BD, la cual nos es retornada por una funcion, como un arreglo associativo, donde cada llave del arreglo, es el nombre de la columa de la tabla.

Y por ultimo, y no por eso, es la menos importante, la funcion compact():

compact() es todo lo contrario a las funciones list() y extract(), su funcion es construir un arreglo con variables previamente definidas en nuestra tabla de simbolos, por ejemplo:

Supongamos que tenemos los siguientes datos:

$identificacion = array(‘nombre’ => ‘maria’, ‘apellido’ => ‘bonita’);
$direccion = array(‘Pais’ => ‘Guatemala’, ‘Ciudad’ => ‘Guatemala’);
$hijos = array(‘pedro’, ‘pablo’, ‘paco’);

Y quisieramos unirlos todos en un arreglo, que representaria la informacion personal de Maria, normalmente lo hariamos de esta forma:

$info = array(‘identificacion’ => $identificacion, ‘direccion’ => $direccion, ‘hijos’ => $hijos);

Lo cual no esta mal, pero puede ser un poco tedioso, e incluso verse un poco desordenado, cuando se traten de muchos datos, lo cual se simplificaria utilizando la funcion compact(), veamos como:

$info = compact(‘identificacion’, ‘direccion’, ‘hijos’);

Que se ve mucho mas compacto y mas simple de entender. compact() lo que hace en resumidas cuentas, es buscar los argumentos en la tabla de simbolos, y construir un arreglo donde, el argumento, en caso de que exista una variable con ese nombre en la tabla de simbolos, se convierte en la llave y el valor de la variable, como el valor de la llave en el arreglo.

De esta forma, si  imprimimos el contenido de $info obtendriamos:

Array 
( 
    [identificacion] => Array 
        ( 
            [nombre] => maria 
            [apellido] => bonita 
        )     

    [direccion] => Array 
        ( 
            [Pais] => Guatemala 
            [Ciudad] => Guatemala 
        )     

    [hijos] => Array 
        ( 
            [0] => pedro 
            [1] => pablo 
            [2] => paco 
        )     

)

Bueno, espero que este articulo, les haya sido de utilidad, y que pongan en practica alguna de las funciones que aprendimos.