multidimensional ejemplo array_reduce array_filter array php arrays callback array-filter

ejemplo - PHP array_filter, ¿cómo obtener la clave en la devolución de llamada?



in array php (5)

En un comentario anterior describiste que en realidad estás buscando algo como esto:

foreach ($t as $k => $v) if (!array_key_exists($k, $valid)) unset($t[$k])

Por lo tanto, para eliminar todos los valores de la matriz $t que no tienen una clave en la matriz $valid .

La función PHP para eso se llama array_intersect_key . La intersección es igual al resultado filtrado:

$filtered = array_intersect_key($t, $valid);

array_filter - Filtra los elementos de una matriz usando una función de devolución de llamada

array array_filter (array $ input [, callback $ callback])

¿Puede la devolución de llamada obtener la clave del valor de matriz actual y cómo?


No hay forma de que la devolución de llamada de array_filter acceda a la clave del elemento, ni existe una función similar que haga lo que usted desea.

Sin embargo, puede escribir su propia función para esto, como la siguiente:

function arrayfilter(array $array, callable $callback = null) { if ($callback == null) { $callback = function($key, $val) { return (bool) $val; }; } $return = array(); foreach ($array as $key => $val) { if ($callback($key, $val)) { $return[$key] = $val; } } return $return; } $test_array = array(''foo'', ''a'' => ''the a'', ''b'' => ''the b'', 11 => 1101, '''', null, false, 0); $array = arrayfilter($test_array, function($key, $val) { return is_string($key); }); print_r($array); /* Array ( [a] => the a [b] => the b ) */ $array = arrayfilter($test_array); print_r($array); /* Array ( [0] => foo [a] => the a [b] => the b [11] => 1101 ) */



No me gustaron las otras opciones sugeridas aquí, si alguien más está buscando esta característica, aquí hay una implementación rápida:

function array_filter_keys($a, $c){ $i=array_filter(array_keys($a), $c); return array_intersect_key($a, array_flip($i)); }

El resultado de esta función es exactamente como suena, devolverá una matriz filtrada por una función de devolución de llamada que recibe las claves en lugar de los valores.

EDITAR: Esto es más que un descargo de responsabilidad, después de leer algunos de los otros comentarios, me doy cuenta de que el OP en realidad solo está buscando array_intersect como señaló Hakre. Sin embargo, dejaré esta respuesta aquí porque la pregunta de OP no indica claramente esa necesidad y esta página aparece en google para array_filter_keys