Laravel – Validando que un array anidado dentro de un Collection, contenga un string.

Las colecciones de laravel son muy útiles al momento de realizar operaciones sobre arrays.

A parte de que las respuestas dadas por Eloquent son instancias del objeto Collection, permitiendonos hacer uso de sus métodos.

Pero recientemente tuve un problema al momento de validar que una colección, con arrays anidados, contenga un string.

Probé con el método contains() pero solo funciona buscando en la raiz y no en arrays internos.

Como ejemplo tengo esta colección:

Al final lo realice de la siguiente manera:

collect(["city" => ['name' => 'Haiti', 'id' => 1],"hora" => 1, "fecha" => 2, "casa" => 3,"dia" => "hola"])

Y lo que dese saber es si contiene la palabra haiti incluso en los arrays anidadados dentro de la colección.

$search = 'haiti';

        $colect = collect(["city" => ['name' => 'Haiti', 'id' => 1],"hora" => 1, "fecha" => 2, "casa" => 3,"dia" => "hola"]);

        $col = $colect->filter(function( $v, $k ) use($search){
           if( is_array($v) ){
            foreach ( $v as $vl){
                //return false !== stristr( $vl, 're' );
                $resp = strpos( strtolower($vl),strtolower($search));
                if( $resp === FALSE ){
                    return false;
                } else {
                    return true;
                }
            }
           } else {
               //return false !== stristr( $v, 'a' );
               $resp = strpos( strtolower($v),strtolower($search));
               if( $resp === FALSE ){
                   return false;
               } else {
                   return true;
               }

           }
        });
        return response()->json($col->count());

Devuelve la cantidad de elementos que contiene la nueva colección generada.

Y así se puede validar que si es mayor a 1, contiene la palabra, de lo contrario no.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *