(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_filter — Filtra los elementos de un array mediante una función de retrollamada
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().
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
:
ARRAY_FILTER_USE_KEY
- pasar la clave como único
argumento a callback
en lugar del valor.
ARRAY_FILTER_USE_BOTH
- pasar tanto el
valor como la clave como argumentos de callback
en lugar del valor.
0
, que pasará el valor como único argumento de callback
.
Devuelve el array filtrado.
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 .
|
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) }
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.