Extraer solo un nombre por cada letra del alfabeto de una BD

Consulta avanzada en Laravel para mostrar una palabra por cada letra del alfabeto de una BD MYSQL, usando like y métodos array para dicha tarea.

Extraer solo un nombre por cada letra del alfabeto de una BD

Generador de palabras únicas Laravel

Laravel Php

En ocaciones necesitamos mostrar o extraer de una lista de nombres de miles de nombre, solo aquellos que tengan la primera letra coincidente con el alfabeto. Ojo no queremos clasificar si no extraer de un conjunto de nombres que empiezen con la letra A  solo uno, y asi sucesivamente.

Pues para lograr ello podemos hacerlo usando Laravel veamos el código PHP:

for($i=65; $i<=90; $i++){
            $letra = chr($i);            
            $c=nombres::where("nombre","like",$letra."%")->pluck('nombre');
            if(!empty($c)){
                foreach ($c as $key) {
                    if(!empty($key)){
                        array_push($tags,$key);
                    } 
                }
            }
        }
  1. La primera línea los que hace es realizar un contador del 65 al 89 creciente
  2. La segunda línea nos trae la letra coincidente del código ASCII
  3. La tercera el la consulta a la tabla nombres donde para el campo nombre busque todoas las coincidencias iniciales  de la letra, pero que solo nos extraiga el campo nombre , más no los otros campos que pueden ser Id, etc..
  4. La cuarta línea verifica si hay resultados
  5. La quinta recorre y parsea el resultado
  6. la sexta verifica que para cada letra haya un resultado
  7. y la septima  array_push() lo que hace es agregar al array $tags la letra $key

Pues bien hasta ahi lo que se ha hecho es extraer todos los nombres sin excepción y se a almacenado en el array $tags

Ahora veamos el código para solo extraer un nombre por cada letra.

if(!empty($tags)){
                $elegido = array_rand($tags,1);
                array_push($itags,$tags[$elegido]);
            }
  1. La primera línea verifica si el array $tags no es vacio
  2. La segunda extrae una posición aleatoria del array
  3. La tercera agrega al array $itags el  elemento elegido $tags[$elegido];

Ahora vemos el código completo:

public function generadorNombresUnicos()
    {

        $itags=array();        
        for($i=65; $i<=90; $i++){
            $letra = chr($i);
            $tags=array();            
            $c=itags::where("nombre","like",$letra."%")->pluck('nombre');
            if(!empty($c)){
                foreach ($c as $key) {
                    if(!empty($key)){
                        array_push($tags,$key);
                    } 
                }
            }
            if(!empty($tags)){
                $elegido = array_rand($tags,1);
                array_push($itags,$tags[$elegido]);
            }
        }        
        return view('front.nombres',compact('itags'));
    }

Como puedes ver este còdigo nos permite extraer aleatoriamente de una lista basta de nombres, solo uno por cada letra del alfabeto, ideal para realizar aplicaciones web de interacción social. juegos, generadores de frases, acrósticos, etc.

PD. Me demoré un fin de semana en construir el código, bueno pero lo implemente con la librerìa fabrics para realizar un generador de acrósticos con cada nombre en forma aleatoria, más adelante publicaré los códigos para realizarlo.

Redacción:| Artículo leído: 352 veces | Publicación:


Compártelo con tus amigos