> Faqs > Cómo filtrar el contenido de un array con PHP

Cómo filtrar el contenido de un array con PHP

De un array de valores de entrada quiero generar un array filtrado de salida, con PHP:

$provincias = ['Málaga', 'Valencia', 'Cádiz', 'Orense', 'Lugo', 'León', 'Toledo', 'Cuenca', 'Guadalajara', 'Jaén', 'Barcelona', 'Madrid'];

Quisiera hacer un filtro para que se filtrasen los valores de ese array, construyendo un nuevo array que tenga los valores que corresponden al filtro. Por ejemplo, provincias que contengan la letra "a".

¿Qué funciones de PHP puedo utilizar? existe alguna función que me haga el filtrado en PHP de una única vez?

Respuestas

Siempre puedes crearte tu función de filtrado manual. No es difícil pues solo tienes que recorrer el array e ir viendo qué elementos te quedas, una vez aplicados los criterios de búsqueda que requiera cada caso.

Por ejemplo aquí te dejo una función de filtrado en PHP que mira el contenido de los items del array, buscando apariciones de uno o más caracteres:

<?php
$provincias = ['Málaga', 'Valencia', 'Cádiz', 'Orense', 'Lugo', 'León', 'Toledo', 'Cuenca', 'Guadalajara', 'Jaén', 'Barcelona', 'Madrid'];

function arrayfilter($elements, $query) {
    $found = [];
    foreach($elements as $element) {
      if(strpos($element, $query) !== false) {
        array_push($found, $element);
      }
    }
    return $found;
} 

var_dump(arrayFilter($provincias, 'o'));

Esta función la puedes mejorar fácilmente para conseguir que el filtrado no tenga en cuenta las mayúsculas y las minúsculas, para que PHP pueda filtrar por ejemplo provincias que contienen "l" y te aparecan tanto Málaga ("l" minúscula) como León ("L" mayúscula).

<?php
$provincias = ['Málaga', 'Valencia', 'Cádiz', 'Orense', 'Lugo', 'León', 'Toledo', 'Cuenca', 'Guadalajara', 'Jaén', 'Barcelona', 'Madrid'];

function arrayfilter($elements, $query) {
    $found = [];
    $query = strtolower($query);
    foreach($elements as $element) {
      $current = strtolower($element);
      if(strpos($current, $query) !== false) {
        array_push($found, $element);
      }
    }
    return $found;
} 

var_dump(arrayFilter($provincias, 'l'));

Espero que haya servido de ayuda.

Julian
1147 49 87 46

Hola Te paso un enlace que espero que te sirva de ayuda https://www.php.net/manual/es/function.array-filter.php Luego tendrás que insertar el resultado en un nuevo array (si quieres mantener los valores del primero) Espero que sea lo que buscas, saludos!

David
95 4 11