El Blog de Webcu

Indexando un arreglo

April 29, 2019

Pherlock Homels sospecha que Poriarty ha logrado pasar a formar parte de la lista de ingenieros certificados de Zend. Phatson tan diligente como siempre a conseguido una lista de los todos los ingenieros, pero hay un problema, la lista no está indexada, lo que hace que las búsquedas sean más lentas. Es que Pherlock y Phatson serán capaces de indexar la lista de una manera eficiente? Veamos.

Ejemplo de lista

Por motivos de seguridad como imaginaran, Pherlock solo pudo darme una lista ficticia, pero servirá para ilustrar la solución:

[
   [
       'name' => 'Carlos Rodriguez',
       'dob' => '1954/02/18',
       'code' => 'ZEN123423434',
   ],
   [
       'name' => 'John Doe',
       'dob' => '1998/11/23',
       'code' => 'ZEN123423435',
   ],
   [
       'name' => 'Mike Altuve',
       'dob' => '1994/08/05',
       'code' => 'ZEN123423436',
   ],
]

Solución inicial

Phatson comenzó rápidamente a escribir código y encontró una solución que efectivamente resuelve el problema. Echémosle un vistazo:

$indexedArray = [];
foreach ($certifiedEngineers as $certifiedEngineer) {
    $indexedArray[$certifiedEngineer['code']] = $certifiedEngineer;
}

Es una solución correcta, pero Pherlock sabe que Poriarty gusta de usar código con estilo más críptico y corto. Entonces aprovecho esta oportunidad para profundizar sus conocimientos acerca de las funciones de arreglos de PHP.

Solución final

Después de una larga búsqueda Pherlock encontró una función que permite indexar un arreglo, dada cualquier columna, en solo una línea de código: array_column!

Este es el tipo de funciones/código que Poriarty le gusta utilizar en sus scripts, ya que tienden a confundir a las mentes menos entrenadas, porque el nombre de la función y lo que se puede lograr con ella son un poco diferentes. Veamos el código:

$indexedArray = array_column($certifiedEngineers, null, 'code');

La intención primaria de la función como bien su nombre indica es extraer los valores de la columna indicada como segundo parámetro. Pero esta función retorna todo el arreglo indexado por la columna indicada en el tercer parámetro si el segundo parámetro es null. Confundido? Yo también cuando vi el código por primera vez.

Tu solución

¿Qué te pareció la solución de Pherlock? Ya la conocías? Es que Poriarty tiene algún otro truco bajo la manga para indexar un arreglo, que se le está escapando a Pherlock por el momento? Déjanos saber mediante a tweet a #webcu


Jorge Glez

Escrito por Jorge Glez. Un ser humano con defectos y virtudes que intenta ser mejor cada día. Twitter