Los frameworks y librerías nos confunden mucho a veces. Tenemos paquetes para todo, pero a veces olvidamos que hay funciones nativas de PHP que nos resuelven nuestros problemas más básicos de forma mucho más simple. Es el caso de la función array_chunk.

Lo que hace array_chunk es partir un array en distintos arrays y su principal utilidad es para mostrar listas en forma de tablas definiendo el tamaño de las columnas. De esta forma, se parte el array original de acuerdo al tamaño que queremos que tenga cada uno y luego, con dos foreach (uno dentro del otro) logramos barrer la lista en forma de columnas. Esta función recibe tres parámetros: el array original que vamos a dividir en partes, un entero indicando el tamaño que tendrá cada una de esas partes y finalmente un boolean opcional que permite o no preservar las claves del array.

El valor de retorno de array_chunk será un array que adentro tendrá una cantidad de arrays determinada en función del tamaño que hayamos elegido.

Entonces si por ejemplo tenemos un array de 100 elementos y queremos dividirlo en arrays de 25 elementos, podríamos usar la función de la siguiente forma:

array_chunk($arrayADividir, 25);

Lo que obtendremos será un array con 4 arrays adentro y cada uno tendrá 25 elementos.

¿Qué ocurre si, por ejemplo, lo hubiéramos querido dividir en tamaños de 30 elementos?

array_chunk</span><span class="crayon-sy">(</span><span class="crayon-v">$arrayADividir</span><span class="crayon-sy">,</span> <span class="crayon-cn">30</span><span class="crayon-sy">)</span><span class="crayon-sy">;

Lo que obtendremos será un array con 4 arrays adentro y cada uno tendrá 25 elementos.

¿Qué ocurre si, por ejemplo, lo hubiéramos querido dividir en tamaños de 30 elementos?

En ese caso tendríamos como resultado un array con cuatro arrays dentro. Los primeros tres serían de 30 elementos y el cuarto, sólo de 10. Es decir, que el último array tendrá siempre los elementos que sobren, en el caso de que no alcance para llegar al tamaño definido.

Un ejemplo práctico con array_chunk

Essta función es muy útil cuando queremos mostrar en las vistas de HTML listas pero en forma de tabla.

Supongamos que tenemos un array con un listado de películas de un hipotético sitio sobre films. Cada película tiene como elemento un enlace al póster. Lo que queremos hacer es mostrar los pósters de las películas como si fuera una tabla (aunque no usaremos el elemento <table> de HTML). Y en este caso, ya que estamos, vamos a agregar algo más para hacerlo interesante. Un formulario para definir cuántas columnas debe haber.

Partimos del listado de películas como array.

$moviesList = array(array('img' =&gt; 'img/abyss.jpg'),array('img' =&gt; 'img/american-pastoral.jpg'),array('img' =&gt; 'img/automata.jpg'),array('img' =&gt; 'img/die-welle.jpg'),array('img' =&gt; 'img/edge-of-tomorrow.jpg'),array('img' =&gt; 'img/good-bad-ugly.jpg'),array('img' =&gt; 'img/lucha-libertad.jpg'),array('img' =&gt; 'img/psycho.jpg'),array('img' =&gt; 'img/silence-of-the-lambs.jpg'),array('img' =&gt; 'img/star-wars.jpg'),array('img' =&gt; 'img/strange-days.jpg'),array('img' =&gt; 'img/the-beach.jpg'),array('img' =&gt; 'img/the-hobbit.jpg'),array('img' =&gt; 'img/x-men.jpg'),);

A continuación vamos a bajar un parámetro por GET. A este parámetro lo llamaremos cols.

$cols = isset($_GET['cols']) ? $_GET['cols'] : 4; if ($cols &lt; 1)$cols = 1;

Si cols no llega por GET, a la variable $cols le asignaremos el valor 4, de forma arbitraria. Y si por algún motivo el valor es menor que 1, lo ajustaremos a 1. Podríamos prestar atención a otros posibles valores de lo que viene por GET, pero no es el objetivo del ejemplo. Así que continuemos.

Utilizamos la función array_chunk con nuestra lista de películas y le pasamos como segundo parámetro la variable $cols. De esta forma, vamos a poder manejar a través de este parámetro la cantidad de arrays en las que dividiremos las películas. Esos arrays serán luego nada más y nada menos que columnas.

$rows = array_chunk($moviesList, $cols);

El resultado de array_chunk lo almacenamos en $rows. Lo usaremos luego en el foreach externo de la vista.

Veamos el resto del código, que sería una vista en HTML.

<!DOCTYPE html><html><head><title>array_chunk()</title><style> .container {text-align: center;} .poster {padding: 1px;border: 1px solid #000;margin: 5px;} </style></head><body><h1>Películas</h1><form name="colsForm" method="get" action=""><label for="cols">Columnas</label><input type="number" name="cols" id="cols" value="<?php echo $cols ?>"><input type="submit" value="Enviar"></form><br><div class="movies"><?php foreach ($rows as $cols) : ?><div><?php foreach ($cols as $col) : ?><img src="<?php echo $col['img'] ?>" width="180" height="300" class="poster"><?php endforeach; ?></div><?php endforeach; ?></div></div></body></html>

Doctype de HTML5, estructura habitual de este tipo de documentos y un poco de estilo para dejar separación entre los pósters de las películas.

Agregué el formulario mediante el cual manejaremos la cantidad de columnas. Noten que tiene un input del tipo number, aunque podría funcionar igual con uno tipo text. En el valor le imprimimos el valor que llega por GET así no lo perdemos en cada envío.

Más abajo están los dos foreach que muestran los pósters. El de afuera itera sobre $rows, es decir, los arrays que se generaron y el de adentro lo hace con su contenido. Por cada uno de estos elementos mostraremos la imagen que corresponde.

El resultado final es que según el valor que pongamos en el formulario, al enviarlo podremos ver los pósters en distintas configuraciones de columnas.

Tags: