array_filter

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

array_filterFiltra los elementos de un array mediante una función de retrollamada

Descripción

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

Evalúa cada valor del array array pasándolos a la función de retrollamada callback. Si la función de retrollamada callback devuelve true, el valor actual del array array es devuelto en el array resultante.

Las claves del array son preservadas, y puede causar anomalías si el array array estaba indexado. El array resultante puede ser reindexado utilizando la función array_values().

Parámetros

array

El array a recorrer

callback

La función de retrollamada a utilizar

Si no se proporciona ninguna función de retrollamada callback, todas las entradas vacías del array array serán eliminadas. Ver la función empty() para comprender cómo PHP maneja el vacío en este caso.

mode

Flag que indica cuáles son los argumentos a enviar a la función de retrollamada callback:

Por omisión 0, que pasará el valor como único argumento de callback.

Valores devueltos

Devuelve el array filtrado.

Historial de cambios

Versión Descripción
8.0.0 callback es ahora nullable.
8.0.0 Si callback espera que se pase un parámetro por referencia, esta función ahora emitirá un E_WARNING.

Ejemplos

Ejemplo #1 Ejemplo con array_filter()

<?php
function odd($var)
{
// devuelve si el entero de entrada es impar
return $var & 1;
}

function
even($var)
{
// devuelve si el entero de entrada es par
return !($var & 1);
}

$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
$array2 = [6, 7, 8, 9, 10, 11, 12];

echo
"Impar :\n";
print_r(array_filter($array1, "odd"));
echo
"Par :\n";
print_r(array_filter($array2, "even"));
?>

El resultado del ejemplo sería:

Impar :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Par :
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)

Ejemplo #2 Ejemplo con array_filter() callback

<?php

$entry
= [
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => '',
5 => '0',
6 => 0,
];

print_r(array_filter($entry));
?>

El resultado del ejemplo sería:

Array
(
    [0] => foo
    [2] => -1
)

Ejemplo #3 Ejemplo con array_filter() y mode

<?php

$arr
= ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];

var_dump(array_filter($arr, function($k) {
return
$k == 'b';
},
ARRAY_FILTER_USE_KEY));

var_dump(array_filter($arr, function($v, $k) {
return
$k == 'b' || $v == 4;
},
ARRAY_FILTER_USE_BOTH));
?>

El resultado del ejemplo sería:

array(1) {
  ["b"]=>
  int(2)
}
array(2) {
  ["b"]=>
  int(2)
  ["d"]=>
  int(4)
}

Notas

Precaución

Si el array es modificado desde la función de retrollamada (por ejemplo se añaden o eliminan elementos), el comportamiento de esta función es indefinido.

Ver también

  • array_intersect() - Calcula la intersección de arrays
  • array_find() - Devuelve el primer elemento que valida la función de retrollamada
  • array_any() - Verifica que al menos un elemento del array valide la función de retrollamada
  • array_map() - Aplica una función a los elementos de un array
  • array_reduce() - Reduce itérativemente un array